1.简介
Pandas是基于numpy写的,让numpy用起来更简单
如果类比列表和字典
numpy就是列表,pandas就是字典
pandas可以给不同的列和行,重新命名
2.学习
2.1 基本介绍
Series
序列
Series的表示为,索引在左边,值在右边
DataFrame
表格型的数据结构,包括:行索引、列索引
可以指定索引的名称,如果不指定默认为0~N-1
DataFrame可以看成一列列的Series,可以通过 df[‘xxx’] 来访问某一个Series
创建DataFrame时,可以选择指定 index和columns
也可以利用字典来生成DataFrame,字典中的键表示Series的名字
字典方式生成DataFrame
DataFrame的属性和方法
df.dtype #查看每一个Series的类型
df.index 和 df.columns #查看行列的名字
df.values #查看所有的值,不含索引
df.describe() #对元素进行描述,技术,均值等等
df.T #翻转
df.head(num) #前num个数据,默认为5
df.sort_index(axis,ascending) #对索引进行排序
#axis:1代表列索引,0行索引
#ascending:True升序,False倒序
df.sort_values(by='xx') #对值进行排序
#by:对哪一个索引的值排序
2.2 用Pandas选择数据
1.基本:对列
df['xx']
df.xx #选取某一列,这两个效果相同。xx表示列名
2.切片:对行
df[0:3]
df['xx1':'xx3']
3.标签筛选
df.loc[行筛选条件,列筛选条件]
例如:df.loc['r1':'r3',['c1','c2','c3']]
4.索引数字筛选
df.iloc[行筛选条件,列筛选条件] #区别就是,不适用名称,而是索引的顺序数
例如:df.iloc[[1,3,5],1:3]
5.混合筛选
df.ix[,] #索引数字和标签可以混着用
6.布尔筛选
df[df.A > 8]
2.3 用Pandas设置值
过程就是:1)选择数据。 2)赋值。
1.基本
df.iloc[2,2] = 666
df.loc['r2','c2'] = 666
df.B[df.A > 8] = 666
2.批处理
df['c3'] = np.nan
df['new col'] = pd.Serires([datas...],index)
2.4 用Pandas处理丢失数据
df.dropna(axis,how='any|all') #丢掉含空值的行或列
#how:any只要行或列内有一个NaN就丢弃,all只有全部为NaN才会丢弃
df.fillna(value='xxx') #用数值填充NaN
df.isnull() #判断每个值是否为空
np.any(df.isnull()) == True #判断整个数据中是否有空
2.5 用Pandas导入导出数据
pandas可以读写的格式很多:csv、excel、json、html、pickle
官方说明:https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html
data = pd.read_csv("xx.csv")
data.to_csv("xx.csv")
2.6 Pandas的concat合并操作
df1 df2 df3
1.concat
res = pd.concat([df1,df2,df3],axis,ignore_index,join='inner|outer',join_axes=[df1.index])
#axis: 0竖向,1横向
#ignore_index:默认原索引不变。为True时,忽略原索引,将三个df的索引统一
#join:上下合并,对于列名不一样的情况。比如:abcd和bcde。默认outer,将不重叠的部分设为NaN。inner:把相同的部分保留,其他列裁剪掉
#join_axes:左右合并,对于行名不一样的情况。选择最终的行索引按照哪一个df,不重叠的部分设为NaN。默认和上面join中的outer效果类似
2.append
res = df1.append(df2,ignore_index) #默认向下追加
res = df1.append([df2,df3],ignore_index)
s = pd.Series([1,2,3,4],index=['a','b','c','d'])
res = df1.append(s,ignore_index)
2.7 Pandas的merge合并操作
更加复杂的合并
1.merge:基于列名进行合并
res = pd.merge(df1,df2,on='xxx')
#on:基于哪一个列进行合并
#基于两个key
res = pd.merge(df1,df2,on=['key1','key2'],how='inner|outer|left|right')
#how:合并时默认inner,只合并on相同的部分,不同的直接剔除。类似于sql中的左右外内连接
res = pd.merge(df1,df2,indicator=True|'indicator_name')
#indicator:显示每一行合并的方式
#通过index进行合并
pd.merge(df1,df2,left_index=True,right_index=True,how='outer|inner')
#left_index,right_index默认为空,为True时表示合并考虑某个index
#how用法和上面相似
#overlapping问题(属性名重复,但意义不一样)
pd.merge(df1,df2,on,suffixes=['_x1','_x2'],how)
#suffixes可以区分出相同的属性名
2.8 plot出图
1.Series
data = pd.Series(......)
data.plot() #plt中plt.plot(x,y)
2.DataFrame
同上
3.散点图
data.plot.scatter(x='xx',y='xx')
#xy的内容是df的列名
ax = data.plot.scatter(x='A',y='B',color='xx',label='Class1')
data.plot.scatter(x='A',y='C',color='xx',label='Class2',ax=ax)
4.其他
bar hist box kde area scatter hexbin
Pandas学习视频和本文章图片来源:https://mofanpy.com/tutorials/data-manipulation/np-pd/