pandas相当于一个字典形式的numpy
1.定义
pd.Series() #可将列表转换为pandas数据,或船舰一个新的序列
pd.date_range(“String”,periods=a) #生成1个含有6个从String开始的日期表示字符串序列
pd.DataFrame(np.random.randn(6,4),index=dates,columns=[‘a’,‘b’,‘c’,‘d’]) #index为行索引,columns为列索引,生成了日期架构,默认索引为0,1,2,3
df=pd.DataFrame({‘A’:1.,
‘B’:pd.Timestamp(‘20130102’),
‘C’:pd.Series(1,index=list(range(4)),dtype=‘float32’),
‘D’:np.array([3]*4,dtype=‘int32’),
‘E’:pd.Categorical([“test”,“train”,“test”,“train”]),
‘F’:‘foo’})
#以传入字典的方式创建pandas数据,列以各个数据的最大值为基准,但指定数据个数的时候要么为1,要么都为最大值,不可以出现参差不齐的情况,如上所示将C的索引中设置成5就会报错
地方
df.dtypes #查看各行数据类型
df.index #每行的标序
df.columns #每列的标序
df.values #输出值
df.describe() #运算数字形式的一些特征
df.T #当成矩阵进行转置
df.sort_index(axis=1,ascending=False) #对列进行排序,若为false则是倒序
df.sort_values(by=‘E’) #by后面接某个列的索引,指按照某个列的值进行排序
2.pandas的选择
df['A]和df.A都可以根据索引引用df的某一列
#切片也可以使用
df.loc[‘20200623’] #根据标签选择
df.loc[:,[‘A’,‘B’]] #根据行和列来筛选输出
df.iloc[3,4] #根据索引输出(类似numpy)
df.ix[:3,[‘A’,‘C’]] #上述两种联合筛选
df[df.A>8] #条件筛选
3.pandas设置值
用pandas的选择方式进行赋值,如:
df.iloc[2,2]=111等
df.B[df.A>0] #只改某一列的值
4.处理丢失数据
df.dropna(axis=0,how=‘any’) #丢掉nan的一行,若为1则丢掉列;any表示有nan则丢掉,all表示全部为nan的时候才丢掉
df.fillnan(value=0) #将nan替换成0
df.isnull() #判断是否有缺失(列表,需要自己去查看)
np.any(df.isnull())==True #直接返回是否有缺失
5.pandas存储调用数据
pd.read_csv(path) #读取csv文件,若含中文应加上encoding=‘gb2312’
pd.to_csv(path) #保存
pickle等存储同理
6.pandas合并(concatenate)
pd.concat([df1,df2,df3],axis=0) #为0时纵向合并,为1时横向合并,ignore_index=True可忽略之前的编号并重新编号,若columns和index的编号不同,则将没有的地方用nan填充,即默认join=‘outer’,若为inner,则将相同的展示,不同的裁剪掉,也可设置join_axes=[df1.index],使轴以某个数组为准,多余部分直接裁剪掉
df1.append() #加入列表中,默认纵向加数据,加一行
7.pandas合并(merge)
left=pd.DataFrame({‘key’:[‘K0’,‘K1’,‘K2’,‘K3’],
‘A’:[‘A0’,‘A1’,‘A2’,‘A3’],
‘B’:[‘B0’,‘B1’,‘B2’,‘B3’]})
right=pd.DataFrame({‘key’:[‘K0’,‘K1’,‘K2’,‘K3’],
‘C’:[‘C0’,‘C1’,‘C2’,‘C3’],
‘D’:[‘D0’,‘D1’,‘D2’,‘D3’]})
pd.merge(left,right,on=‘key’) #基于某一行进行合并
left=pd.DataFrame({‘key1’:[‘K0’,‘K0’,‘K1’,‘K1’],
‘key2’:[‘K0’,‘K1’,‘K0’,‘K1’],
‘A’:[‘A0’,‘A1’,‘A2’,‘A3’],
‘B’:[‘B0’,‘B1’,‘B2’,‘B3’]})
right=pd.DataFrame({‘key1’:[‘K0’,‘K1’,‘K1’,‘K2’],
‘key2’:[‘K0’,‘K0’,‘K0’,‘K0’],
‘C’:[‘C0’,‘C1’,‘C2’,‘C3’],
‘D’:[‘D0’,‘D1’,‘D2’,‘D3’]})
res=pd.merge(left,right,on=[‘key1’,‘key2’])#根据两个key进行合并,默认how=‘inner’ 可以使用left,outer,right
df1=pd.DataFrame({‘col1’:[0,1],‘col_left’:[‘a’,‘b’]})
df2=pd.DataFrame({‘col1’:[1,2,2],‘col_right’:[2,2,2]})
res=pd.merge(df1,df2,on=‘col1’,how=‘outer’,indicator=True)
#indicator属性可以显示出哪个含有该数据,也可以用来给该列进行改名,以下为输出
col1 col_left
0 0 a
1 1 b
col1 col_right
0 1 2
1 2 2
2 2 2
col1 col_left col_right _merge
0 0 a NaN left_only
1 1 b 2.0 both
2 2 NaN 2.0 right_only
3 2 NaN 2.0 right_only
pd.merge(left,right,left_index=True,right_index=True,how=‘outer’)
#也可以使用index的方式进行合并
boys=pd.DataFrame({‘k’:[‘K0’,‘K1’,‘K2’],‘age’:[1,2,3]})
girls=pd.DataFrame({‘k’:[‘K0’,‘K0’,‘K3’],‘age’:[4,5,6]})
res=pd.merge(boys,girls,on=‘k’,suffixes=[’_boy’,’_girl’],how=‘inner’)
#若两个表有重名,比如上面的K0,而又全部想保存下来,就用suffixes参数为两个相同值指定索引列表,如下:
age k
0 1 K0
1 2 K1
2 3 K2
age k
0 4 K0
1 5 K0
2 6 K3
age_boy k age_girl
0 1 K0 4
1 1 K0 5
8.画图
需要用到
import matplotlib.pyplot as plt
data=pd.Series(np.random.randn(1000),index=np.arange(1000))
data=data.cumsum()
data.plot()
plt.show()#直接画图
data.head() #前五个数据
#多组数据
data=pd.DataFrame(np.random.randn(1000,4),index=np.arange(1000)
columns=list(“ABCD”))
data=data.cumsum()
data.plot()
plt.show()
plt.scatter(x=,y=) #散点图
#plot methods
#‘bar’,‘hist’,‘box’,‘kde’,‘area’,‘hexbin’,'pie’等