首先第一部还是导入 Pandas 与 NumPy ,并且要生成一个 DataFrame ,这里小编就简单的使用随机数的形式进行生成,代码如下:
import numpy as np import pandas as pd dates = pd.date_range('20200101', periods=6) df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD')) print(df)
这里最后我们打印了一下这个生成的 DataFrame ,结果如下:
A B C D
2020-01-01 0.177499 -0.025693 0.182894 -1.123577
2020-01-02 1.067580 1.592576 -0.010205 -0.349342
2020-01-03 1.141218 1.032333 1.364477 0.851630
2020-01-04 0.920260 -0.243247 0.196369 -0.835655
2020-01-05 -0.729184 -0.235706 1.144007 -1.048619
2020-01-06 -0.480888 -0.995325 -0.283726 0.428644
1.head()
# 查看头部数据 print(df.head(1))
A B C D
2020-01-01 0.177499 -0.025693 0.182894 -1.123577
2.tail()
# 查看尾部数据 print(df.tail(2))
A B C D
2020-01-05 -0.729184 -0.235706 1.144007 -1.048619
2020-01-06 -0.480888 -0.995325 -0.283726 0.428644
3.index
# 获取索引 print(df.index)
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05', '2020-01-06'], dtype='datetime64[ns]', freq='D')
4.columns
# 获取列名 print(df.columns)
Index(['A', 'B', 'C', 'D'], dtype='object')
5.describe()
# 查看数据的统计摘要 print(df.describe())
A B C D count 6.000000 6.000000 6.000000 6.000000 mean 0.349414 0.187490 0.432303 -0.346153 std 0.818647 0.948383 0.663604 0.821275 min -0.729184 -0.995325 -0.283726 -1.123577 25% -0.316291 -0.241362 0.038070 -0.995378 50% 0.548879 -0.130700 0.189632 -0.592498 75% 1.030750 0.767826 0.907098 0.234148 max 1.141218 1.592576 1.364477 0.851630
Pandas 还为我们提供了一个神奇的功能,「转置数据」,就是把行列互换,示例如下:
# 转置数据 print(df.T)
2020-01-01 2020-01-02 2020-01-03 2020-01-04 2020-01-05 2020-01-06 A 0.177499 1.067580 1.141218 0.920260 -0.729184 -0.480888 B -0.025693 1.592576 1.032333 -0.243247 -0.235706 -0.995325 C 0.182894 -0.010205 1.364477 0.196369 1.144007 -0.283726 D -1.123577 -0.349342 0.851630 -0.835655 -1.048619 0.428644
6.sort_index()
用途:默认根据行标签对所有行排序,或根据列标签对所有列排序,或根据指定某列或某几列对行排序。
注意:df.sort_index()
可以完成和 df.sort_values()
完全相同的功能,但 python 更推荐用只用 df.sort_index()
对 index 和 columns 排序,其他排序方式用 df.sort_values()
。
语法:DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None)
- axis:0 按照行名排序;1 按照列名排序。
- level:默认 None ,否则按照给定的 level 顺序排列。
- ascending:默认 True 升序排列; False 降序排列。
- inplace:默认False,否则排序之后的数据直接替换原来的数据框。
- kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。似乎不用太关心。
- na_position:缺失值默认排在最后{"first","last"}。
- by:按照某一列或几列数据进行排序,但是by参数貌似不建议使用。
# 默认按「行标签」升序排列 print(df1.sort_index())
b a c
0 2 3 3
1 3 2 8
2 1 4 1
3 2 1 2
# 按「列标签」升序排列 print(df1.sort_index(axis=1))
a b c 2 4 1 1 0 3 2 3 1 2 3 8 3 1 2 2
7.sort_values()
用途:既可以根据列数据,也可根据行数据排序。
注意:必须指定by参数,即必须指定哪几行或哪几列;无法根据 index 和 columns 排序(由 sort_index()
执行)
语法:DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')
- axis:{0 or ‘index’, 1 or ‘columns’}, default 0,默认按照列排序,即纵向排序;如果为1,则是横向排序。
- by:str or list of str;如果axis=0,那么by="列名";如果axis=1,那么by="行名"。
- ascending:布尔型,True则升序,如果by=['列名1','列名2'],则该参数可以是[True, False],即第一字段升序,第二个降序。
- inplace:布尔型,是否用排序后的数据框替换现有的数据框。
- kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。似乎不用太关心。
- na_position:{‘first’, ‘last’}, default ‘last’,默认缺失值排在最后面。
# 按 b 列升序排序 print(df1.sort_values(by='b'))
b a c 2 1 4 1 0 2 3 3 3 2 1 2 1 3 2 8
# 先按 b 列降序,再按 a 列升序排序 print(df1.sort_values(by=['b','a'],axis=0,ascending=[False,True]))
b a c 1 3 2 8 3 2 1 2 0 2 3 3 2 1 4 1
8.添加、删除
创建好了 DataFrame 以后,我们自然是希望可以动态的操作它,那么标准的 CRUD 操作必不可少。
获取数据示例如下,这里我们使用 df4 做演示:
d1 = {'one': [1., 2., 3., 4.], 'two': [4., 3., 2., 1.]} df4 = pd.DataFrame(d1, index=['a', 'b', 'c', 'd']) print(df4)
# 删除数据 del df4['two'] df4.pop('three') print(df4)
one flag a 1.0 False b 2.0 False c 3.0 True d 4.0 True
# 插入数据 df4['foo'] = 'bar' print(df4)
one flag foo a 1.0 False bar b 2.0 False bar c 3.0 True bar d 4.0 True bar
插入与 DataFrame 索引不同的 Series 时,以 DataFrame 的索引为准:
df4['one_trunc'] = df4['one'][:2] print(df4)
结果如下:
one flag foo one_trunc a 1.0 False bar 1.0 b 2.0 False bar 2.0 c 3.0 True bar NaN d 4.0 True bar NaN