Gracekite's Homepage

Back

注意:这篇文档只适用于高考,完全不是Pandas文档。

DataFrame#

提供数据:

IDdata01data02data03data04data05data06data07data08
1810841947221114886489380
2903225742722536448224917
338738085333696338422360
4926487321819427944615178
52466719984232356555690
6974661443753888293730117

读入数据#


df = pd.read_excel("test.xlsx")
python
   ID  data01  data02  data03  data04  data05  data06  data07  data08
0   1     813     620     621      63      31     883     860     236
1   2     244      84     767     592     151     110     941     911
2   3     339     776     993     779     699     247     230     239
3   4     952     415     814     617     308     930     625     911
4   5     812     706     378     959      52     700     711      54
5   6     946     208     860      82     977     835     873     268
shell

把首列设为index

df = pd.read_excel("test.xlsx",index_col=0)
python
    data01  data02  data03  data04  data05  data06  data07  data08
ID
1      813     620     621      63      31     883     860     236
2      244      84     767     592     151     110     941     911
3      339     776     993     779     699     247     230     239
4      952     415     814     617     308     930     625     911
5      812     706     378     959      52     700     711      54
6      946     208     860      82     977     835     873     268
shell

一些操作#

.T#

return DataFrame

行列转换

df = pd.read_excel("test.xlsx")
print(df)
print()
print(df.T)
python

.at[index,columns]#

读取#

return values

print(df.at[5,"ID"])
print(df.at[4,"data06"])
python
6
700
shell

操作#

print(df.at[4,"data06"])
df.at[4,"data06"]=114
print(df.at[4,"data06"])
python
700
114
shell

.columns#

return 类似list

print(df.columns)
python
Index(['ID', 'data01', 'data02', 'data03', 'data04', 'data05', 'data06',
       'data07', 'data08'],
      dtype='object')
shell

.index#

return 类似list

print(df.index)
python
RangeIndex(start=0, stop=6, step=1)
shell

.pop(columns)#

删除某一列 然后将删除的值返回

return Series

print(df)
print()
print(df.pop("data05"))
print()
print(df)
python

.size#

获取整个表格数据个数

return int

print(df.size)
python
54
shell

.count(axis=0, numeric_only=False)#

return Series

更改数据:

IDnamedata01data02data03data04data05data06data07data08
1John21540684490120241352266
2Bob3086125285463995146163
3Michael60869562070767944255793
4Alice466275154519193529338480
5Merry867545283475867709118359
6Harry975195980997218734546338
print(df.count())
print()
print(df.count(axis=1))
print()
print(df.count(numeric_only=True))
python

.drop(labels=None, axis=0, index=None, columns=None)#

return DataFrame

删除列#

print(df)
df = df.drop(columns=["data02","data03"])
print(df)
python

或者

print(df)
df = df.drop(["data02","data03"],axis=1)
print(df)
python
   ID     name  data01  data02  data03  data04  data05  data06  data07  data08
0   1     John      73     479     984     435     550     396      80     660
1   2      Bob      84     785     929     828     742      80     864     257
2   3  Michael      80     444     874     345     141     172     906      61
3   4    Alice     870     380     328     396     564     362     371     599
4   5    Merry     668     997     189     113     410     969     542     332
5   6    Harry     536     732     969     609     852     517     444     346
   ID     name  data01  data04  data05  data06  data07  data08
0   1     John      73     435     550     396      80     660
1   2      Bob      84     828     742      80     864     257
2   3  Michael      80     345     141     172     906      61
3   4    Alice     870     396     564     362     371     599
4   5    Merry     668     113     410     969     542     332
5   6    Harry     536     609     852     517     444     346
shell

删除行#

print(df)
df = df.drop([2,5])
print(df)
python

或者

print(df)
df = df.drop(index=[2,5])
print(df)
python
   ID     name  data01  data02  data03  data04  data05  data06  data07  data08
0   1     John      73     479     984     435     550     396      80     660
1   2      Bob      84     785     929     828     742      80     864     257
2   3  Michael      80     444     874     345     141     172     906      61
3   4    Alice     870     380     328     396     564     362     371     599
4   5    Merry     668     997     189     113     410     969     542     332
5   6    Harry     536     732     969     609     852     517     444     346
   ID   name  data01  data02  data03  data04  data05  data06  data07  data08
0   1   John      73     479     984     435     550     396      80     660
1   2    Bob      84     785     929     828     742      80     864     257
3   4  Alice     870     380     328     396     564     362     371     599
4   5  Merry     668     997     189     113     410     969     542     332
shell

.groupby(axis=0, as_index=True, sort=True)#

return DataFrameGroupBy

更改数据:

IDnamedata01data02data03data04
1John28553863853
2Bob34956833322
3Michael88684091726
4Alice6775210675
5Merry443414956496
6Harry235860230211
7John800604245659
8Bob693558761266
9Michael532577504381
10Alice703118867707
11Merry253861240334
12Harry585288361135
13John828974814811
14Bob73078113693
15Michael2743521624
16Alice437587476683
17John494936475396
18Bob390535506874
19Michael89270203417
20Alice51046451070
print(df)
print()
df_gb = df.groupby("name")
print(df_gb)
print()
print(df_gb.all())
print()
df_gb = df.groupby("name",as_index=False)
print(df_gb.all())
print()
df_gb = df.groupby("name",sort=False)
print(df_gb.all())
python

.count()#

返回每个群组内项目的计数

return DataFrame

df_gb = df.groupby("name")
print(df_gb.count())
python
         ID  data01  data02  data03  data04
name
Alice     4       4       4       4       4
Bob       4       4       4       4       4
Harry     2       2       2       2       2
John      4       4       4       4       4
Merry     2       2       2       2       2
Michael   4       4       4       4       4
shell

.max(numeric_only=False)#

计算每个群组中的最大值

注意: numeric_only=False在教科书版本中默认为True,这个选项若为False会使非整形和浮点型条目报错!!! 以下.min()、.mean()、.sum()同理.

return DataFrame

df_gb = df.groupby("name")
print(df_gb.max())
python
         ID  data01  data02  data03  data04
name
Alice    20     703     752     867     707
Bob      18     730     781     761     874
Harry    12     585     860     361     211
John     17     828     974     863     853
Merry    11     443     861     956     496
Michael  19     892     840     521     726
shell

.min(numeric_only=False)#

计算每个群组中的最小值

return DataFrame

df_gb = df.groupby("name")
print(df_gb.min())
python
         ID  data01  data02  data03  data04
name
Alice     4      67     118     106      70
Bob       2     349     535      13     266
Harry     6     235     288     230     135
John      1     285      53     245     396
Merry     5     253     414     240     334
Michael   3     274       3      91     381
shell

.mean(numeric_only=False)#

计算每个群组中数据的平均数

return DataFrame

df_gb = df.groupby("name")
print(df_gb.mean())
python
           ID  data01  data02  data03  data04
name
Alice    12.5  429.25  480.25  489.75  383.75
Bob      10.5  540.50  610.50  328.25  538.75
Harry     9.0  410.00  574.00  295.50  173.00
John      9.5  601.75  641.75  599.25  679.75
Merry     8.0  348.00  637.50  598.00  415.00
Michael  11.5  646.00  372.50  329.75  537.00
shell

.sum(numeric_only=False)#

给每个群组中的数据求和

return DataFrame

df_gb = df.groupby("name")
print(df_gb.sum())
python
         ID  data01  data02  data03  data04
name
Alice    50    1717    1921    1959    1535
Bob      42    2162    2442    1313    2155
Harry    18     820    1148     591     346
John     38    2407    2567    2397    2719
Merry    16     696    1275    1196     830
Michael  46    2584    1490    1319    2148
shell

.head(n=5)#

返回每个群组中前n项

return DataFrame

df_gb = df.groupby("name")
print(df_gb.head(1))
print()
print(df_gb.head(n=1))
print()
print(df_gb.head(2))
print()
python

.tail(n=5)#

返回每个群组中后n项

return DataFrame

df_gb = df.groupby("name")
print(df_gb.tail(1))
print()
print(df_gb.tail(n=1))
print()
print(df_gb.tail(2))
print()
python

.head(n=5)#

返回DataFrame的前n项

return DataFrame

print(df.head())
print()
print(df.head(3))
print()
print(df.head(n=6))
print()
python

.tail(n=5)#

返回DataFrame的后n项

return DataFrame

print(df.tail())
print()
print(df.tail(3))
print()
python
    ID     name  data01  data02  data03  data04
15  16    Alice     437     587     476     683
16  17     John     494     936     475     396
17  18      Bob     390     535     506     874
18  19  Michael     892      70     203     417
19  20    Alice     510     464     510      70

    ID     name  data01  data02  data03  data04
17  18      Bob     390     535     506     874
18  19  Michael     892      70     203     417
19  20    Alice     510     464     510      70
shell

.max(axis=0, numeric_only=False)#

返回行或列的最大值

return Series

print(df.max())
python
ID             20
name      Michael
data01        892
data02        974
data03        956
data04        874
dtype: object
shell

对于axis=True我们发现

print(df.max(axis=1))
python

这就是上面说的numeric_only=False造成的 我们可以看到错误为

TypeError: '>=' not supported between instances of 'int' and 'str'
shell

但考试笔试请忽略

正确的应该是

print(df.max(axis=1, numeric_only=True))
python

这样会默认省掉name这一列

.min(axis=0, numeric_only=False)#

返回行或列的最小值

return Series

print(df.min())
print()
print(df.min(axis=1,numeric_only=True))
print()
python

.mean(axis=0, numeric_only=False)#

返回行或列的平均值

return Series

print(df.mean(numeric_only=True))
print()
print(df.mean(axis=1,numeric_only=True))
print()
python

.sum(axis=0, numeric_only=False)#

对行或列求和

return Series

print(df.sum())
print()
print(df.sum(numeric_only=True))
print()
print(df.sum(axis=1,numeric_only=True))
print()
python

.to_excel() .to_csv() …#

导出到excel,csv等等

return .xlsx, .xls, .csv…

df.to_excel("export.xlsx")
df.to_csv("export.csv")
python

Pandas笔记
https://betteroier.github.io/blog/pandas%E7%AC%94%E8%AE%B0
Author Yuxuan Zheng
Published at July 3, 2023