Pandas库是非常好用的数据处理库,下面对一些常见语法进行介绍。
import numpy as np
import pandas as pd
创建pandas对象
- 通过series创建
s=pd.Series([1,3,5,np.nan,6,8])
print(s)
#0 1.0
#1 3.0
#2 5.0
#3 NaN
#4 6.0
#5 7.0
#dtype: float64
- 通过dataframe创建
#使用DataFrame,通过index指定行索引,columns指定列索引
dates=pd.DataFrame(np.random.random(2,2),index=[1,2],columns=list('AB'))
print(dates)
# A B
#1 0.234430 0.115264
#2 0.583374 0.883520
pandas数据属性
属性 | 说明 |
---|---|
df.index | 显示索引 |
df.columns | 显示列索引 |
df.describe() | 显示常见的一些统计数据 |
pandas数据操作
- 数据转置
a=pd.DataFrame(np.random.random((2,2)),index=[1,2],columns=list('AB'))
print(a)
# A B
#1 0.137045 0.489604
#2 0.578191 0.884470
print(a.T) #转置
# 1 2
#A 0.137045 0.578191
#B 0.489604 0.884470
- 按索引排序
通过frame.sort_index(axis=0)按索引排序:默认按行索引排序,指定axis=1则按列索引排序.
a=pd.DataFrame(np.random.random((2,2)),index=[2,1],columns=list('BA'))
print(a)
# B A
#2 0.987608 0.368984
#1 0.694016 0.315816
print(a.sort_index())
# B A
#1 0.694016 0.315816
#2 0.987608 0.368984
print(a.sort_index(axis=1))
# A B
#2 0.368984 0.987608
#1 0.315816 0.694016
- 按值排序
通过sort_values(by,axis=0,…)进行值的排序
by:这个参数要求传入一个字符或者是一个字符列表,用来指定按照哪个元素进行排序
axis=0表示调整行,axis=1表示调整列.
print(a)
# B A
#2 0.987608 0.368984
#1 0.694016 0.315816
print(a.sort_values(by='A')) #根据'A'这列的值来调整行
# B A
#1 0.694016 0.315816
#2 0.987608 0.368984
print(a.sort_values(by=2,axis=1)) #根据行索引2这行的值来调整列
# A B
#2 0.368984 0.987608
#1 0.315816 0.694016
- apply()函数
DataFrame.apply(func,axis=0,…)
参数说明:
- func:传入的函数,相当于c/c++的函数指针
- axis=0则将一列数据传入函数,axis=1则每次将一行数据传入函数
a=pd.DataFrame(np.random.random((2,2)),index=[1,2],columns=list('AB'))
print(a)
# A B
#1 0.144386 0.218847
#2 0.127204 0.390031
print(a.apply(np.cumsum)) #np.cumsum对每一列递归累加
# A B
#1 0.144386 0.218847
#2 0.271591 0.608878
print(a.apply(lambda x:x.max()-x.min(),axis=1)) #每一行的最大值减去最小值
#1 0.074460
#2 0.262827
#dtype: float64
数据访问
- 通过head(),tail()查看数据
函数/方法 | 说明 |
---|---|
df.head(n) | 查看数据df的前n行 |
df.tail(n) | 查看数据df的后n行 |
- 通过切片索引[]获取
切片索引[]只能输入一个维度,不能用逗号输入两个维度,有两种用法。
- 使用列名:输入列索引,而且必须是列名。
b=pd.DataFrame(np.random.random((3,3)),index=list('abc'),columns=list('ABC'))
print(b)
# A B C
#a 0.598969 0.729189 0.948198
#b 0.740842 0.081477 0.956650
#c 0.926341 0.341224 0.376946
print(b['B'])
#a 0.729189
#b 0.081477
#c 0.341224
#Name: B, dtype: float64
print(b[['A','B']])
# A B
#a 0.598969 0.729189
#b 0.740842 0.081477
#c 0.926341 0.341224
b['a'] #错误用法,不能用行索引
- 使用布尔索引:使用的布尔索引的长度必须和行索引长度一致,此时筛选的是符合条件的行。
print(b)
# A B C
#a 0.598969 0.729189 0.948198
#b 0.740842 0.081477 0.956650
#c 0.926341 0.341224 0.376946
mask=[True,False,True]
print(b[mask])
# A B C
#a 0.598969 0.729189 0.948198
#c 0.926341 0.341224 0.376946
print(b[b.B>0.5])
# A B C
#a 0.598969 0.729189 0.948198
- 通过标签选择loc[]
通过loc[]指定索引名来进行选择。
print(b)
# A B C
#a 0.598969 0.729189 0.948198
#b 0.740842 0.081477 0.956650
#c 0.926341 0.341224 0.376946
print(b.loc['a'])
#A 0.598969
#B 0.729189
#C 0.948198
#Name: a, dtype: float64
print(b.loc[:,'A'])
#a 0.598969
#b 0.740842
#c 0.926341
#Name: A, dtype: float64
print(b.loc['a','A']) # 获取单个标量值
#0.5989693588158244
print(b.loc['a':'b','A':'B']) #注意:这里包含end行
# A B
#a 0.598969 0.729189
#b 0.740842 0.081477
- 通过位置选择iloc[]
通过iloc[]指定数值索引进行选择.
print(b)
# A B C
#a 0.598969 0.729189 0.948198
#b 0.740842 0.081477 0.956650
#c 0.926341 0.341224 0.376946
print(b.iloc[0])
#A 0.598969
#B 0.729189
#C 0.948198
#Name: a, dtype: float64
print(b.iloc[:,0])
#a 0.598969
#b 0.740842
#c 0.926341
#Name: A, dtype: float64
print(b.iloc[0,0]) # 获取单个标量值
#0.5989693588158244
print(b.iloc[0:1,0:1]) #注意:这里不包含end行
# A
#a 0.598969
- 获取一个标量值
可以通过at[]或iat[]来获取一个标量值,at[]输入的是索引名,iat[]输入的是数值索引。
print(b)
# A B C
#a 0.598969 0.729189 0.948198
#b 0.740842 0.081477 0.956650
#c 0.926341 0.341224 0.376946
print(b.at['a','A'])
#0.5989693588158244
print(b.iat[0,0])
#0.5989693588158244
缺少值的处理
在处理数据中经常会有缺少值,这里介绍几个常用的处理缺失值的函数。
a=np.array([1,2,3,np.nan,4,5,np.nan,np.nan,np.nan]).reshape(3,3)
b=pd.DataFrame(a,index=[1,2,3],columns=list('ABC'))
print(b)
# A B C
#1 1.0 2.0 3.0
#2 NaN 4.0 5.0
#3 NaN NaN NaN
print(b.dropna(how='all')) #将全为np.nan的行丢弃
# A B C
#1 1.0 2.0 3.0
#2 NaN 4.0 5.0
print(b.fillna(100)) #将np.nan填充为100
# A B C
#1 1.0 2.0 3.0
#2 100.0 4.0 5.0
#3 100.0 100.0 100.0
print(b.isna()) #返回boolen
# A B C
#1 False False False
#2 True False False
#3 True True True
获取数据
- 从cvs文件获取数据
d=pd.DataFrame(np.random.random((2,2)),index=[1,2],columns=list('AB'))
#写入csv文件
d.to_csv('d.csv')
#从csv文件读取数据
e=pd.read_csv('d.csv')