contents,多图预警!!
pandas 数据的创建
设置
作用 | 代码 |
---|---|
显示所有列 | pd.set_option(‘display.max_columns’, None) |
显示所有行 | pd.set_option(‘display.max_rows’, None) |
设置每行显示的长度 | pd.set_option(‘display.width’, 200) |
创建series
s = pd.Series(data, index=index)
其中 index 是一个列表,用来作为数据的标签。data 可以是不同的数据类型:Python 字典,ndarray 对象,一个标量值
note:
- Series 是类 ndarray 对象,就可以切片,用索引等当做np中的数组来操作操作
- Series 是字典对象,就可以当做字典来用s.get(‘f’)
- 进行标签对齐操作
创建dataframe
(2维的,就有行标签和列标签,支持自动索引对齐)
f = pd.DataFrame(data, index=index, columns=columns)
其中 index 是行标签,columns 是列标签,data 可以是下面的数据:
- 由一维 numpy 数组,list,Series 构成的字典(list长度一定要相同,series长度可以不同,缺失会nan补上)
- 二维 numpy 数组
- 一个 Series
- 另外的 DataFrame 对象
note:
dateframe会从data中自动搜索索引,若先前是有索引的,则在创建时会在指定的索引中寻找对应数据(索引对齐操作),不存在会用Nan填补
具体放法1:
dates=pd.date_range('20210101',periods=6)
datas=pd.DataFrame(np.random.random((6,4)),index=dates,columns=list('ABCD'))
法2:
d={
'A':0,'B':range(4),'C':pd.Timestamp('20210101')}
datas=pd.DataFrame(d)
Panel
Panel 是三维带标签的数组。实际上,Pandas 的名称由来就是由 Panel 演进的,即 pan(el)-da(ta)-s。Panel 比较少用,但依然是最重要的基础数据结构之一。
items: 坐标轴 0,索引对应的元素是一个 DataFrame
major_axis: 坐标轴 1, DataFrame 里的行标签
minor_axis: 坐标轴 2, DataFrame 里的列标签
Dataframe添加列
-
df.insert(1, ‘bar’, df[‘one’])
第一个为添加的位置,第二个是标签名,第三个是数据
-
df.assign(Ratio = df[‘A’] / df[‘B’]) #实际的df没有变,是通过复制返回了一个新的dataframe
列名=data的操作,可以是函数,例如df.assign(AB_Ratio = lambda x: x.A / x.B)
pandas索引
- 重新索引
s.reindex(list(‘abcdefgh’)) #新增加的索引没有值为Nan,
也可用s.reindex(list(‘abcdefgh’), fill_value=0) #fill_value赋予默认值,也可用参数method=‘ffill’,‘bfill’,ffill是用前面的数填充,bfill使用后面的数填充。dataframe中method只对行有效。
3. 给索引命名
对series:s.index.name = ‘alpha’
对dataframe:df.index.name=‘row’,df.columns.name=‘col’
-
查询索引的类
pd.*Index? -
查询是否有重复的索引: s.index.is_unique
返回有索引唯一值的索引列表: s.index.unique()
可用grouby来根据具体需要处理重复索引,例如s.groupby(s.index).sum() #还有.mean()等等
多层次索引
可以使数据在一个轴上有多个索引级别。即可以用二维的数据表达更高维度的数据,使数据组织方式更清晰。它使用 pd.MultiIndex 类来表示。
series的多层索引
dataframe的多层索引
dataframe多层索引的交换和排序
df2 = df.swaplevel(‘row-1’, ‘row-2’)
df.sortlevel(0) #括号中的数字表示对几级索引进行排序
按照索引级别进行统计
df.sum(level=0) #.sum表示使用的函数,level表示按照几级索引的值进行操作
索引与列的转换
df.set_index(‘c’) #将索引为c的这列设置层索引
df2.reset_index() #则将df的索引变为列名,索引变为默认的0,1,2…
pandas查询函数
df.query()
参数 | 说明 |
---|---|
expr | 要评估的查询字符串; 可以在环境中引用变量,在变量前面加上@字符(@a+b); 也可以通过在反引号中将空格或运算符括起来来引用它们 |
inplace=False | 查询是应该修改数据还是返回修改后的副本 |
丢弃部分数据
df2 = df.drop([‘two’, ‘four’], axis=1) #返回一个丢弃[‘two’, ‘four’]两列的dataframe,axis默认是0.
函数应用
-
apply: 这里有大佬的讲解连接:map、apply、applymap详解
(1). 将数据按行或列进行计算,默认axis=0是按列,设置axis=1可按行
(2). GroupBy 的 apply 函数对每个分组进行计算,
groupby(‘分组关键字’).apply(函数名,函数的参数1,函数的参数2,…)
下方示例为应用groupby,来用各分组的平均值去填充Nan
-
applymap: 将数据按元素为进行计算
pandas排序
对标签
datas.sort_index(axis=1,ascending=False) #axis=1也课用‘columns’替换
axis=1对列标签,0对行标签,False降序,默认为True升序
对值排序和排名
datas.sort_values(by=‘A’,ascending=False)
对series进行排名,method='first’表示先出现的先排名,dataframe中类似,df.rank()
pandas数据访问的高效方式
datas.loc[:,[‘B’,‘D’]]
datas.at[pd.Timestamp(‘20210101’),‘