pandas学习笔记

pandas处理丢失数据

当某一行有nan即丢失的数据时,可以选择把某一行或列丢掉
df.dropna(axis=0,how=‘any’) #axis=1代表列,0代表行,how可以等于any或者all,等于any表示行/列中有一个nan就删掉,all表示行/列中全部为nan才能删掉
不想丢掉就可以填上
df.fillna(value=0) #value为你想填的值
查看你的数据是否有缺失可以用
df.isnull()对每个数据进行判断,返回一个元素为true或false的矩阵,nan的元素返回true,其余返回false
如果觉得矩阵太多太大可以使用np.any(df.isnull())==True

pandas数据的存取

1.pickle

pickle模块:不能在excel中显示

把 Python 对象直接保存到文件里,而不需要先把它们转化为字符串再保存,也不需要用底层的文件访问操作,直接把它们写入到一个二进制文件里。pickle 模块会创建一个 Python 语言专用的二进制格式,不需要使用者考虑任何文件细节,它会帮你完成读写对象操作。用pickle比你打开文件、转换数据格式并写入这样的操作要节省不少代码行。包括loads方法和dumps方法

2.csv格式

csv是最通用的一种文件格式,它可以非常容易地被导入各种PC表格及数据库中。 此文件,一行即为数据表的一行。生成数据表字段用半角逗号隔开。csv文件用记事本和excel都能打开,用记事本打开显示逗号,用excel打开没有逗号了。

读取csv文件就可以直接用data=read_csv(‘文件名’)

存储就是data.to_pickle(‘文件名’)

还有很多种方式以及各式如下图所示

python替换列表的空值 python某一列空值替换_数据

pandas合并dataframe,concatenating

先创建三个dataframe

df1=pandas.DataFrame(np.ones((3,4))*0,columns=[‘a’,‘b’,‘c’,‘d’])

df2=pandas.DataFrame(np.ones((3,4))*1,columns=[‘a’,‘b’,‘c’,‘d’])

df3=pandas.DataFrame(np.ones((3,4))*2,columns=[‘a’,‘b’,‘c’,‘d’])

python替换列表的空值 python某一列空值替换_学习_02

纵向合并axis=0,横向合并axis=1

res=pd.concat([df1,df2,df3])

python替换列表的空值 python某一列空值替换_pandas_03


想更新索引就增加一个参数

res=pd.concat([df1,df2,df3],axis=0,ignore_index=True)

python替换列表的空值 python某一列空值替换_学习_04

join

类似于数据库原理,join就是连接
当两个dataframe的行和列的索引不同时,可以使用join,如果使用concat参数默认会出现nan,此时join参数默认值为outer,如下图所示:

df1=pandas.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'],index=[1,2,3])
df2=pandas.DataFrame(np.ones((3,4))*1,columns=['b','c','d','e'],index=[2,3,4])

res=pd.concat([df1,df2])
print(res)

python替换列表的空值 python某一列空值替换_python_05

inner就是内联结,只保留相同部分,如下图所示:

res=pd.concat([df1,df2],join='inner')

python替换列表的空值 python某一列空值替换_数据_06


下一种方式,类似于左/右联结

res=pd.concat([df1,df2],join_axes=[df1.index]) #现在这种方式已经不存在了

下一种方式 append
在纵向或者横向为一个dataframe加上另一个dataframe,axis=0纵向,axis=1横向

res=df1.append(df2)

python替换列表的空值 python某一列空值替换_pandas_07


也可以加多个df1.append([df2,df3])

pandas的merge合并

对于key或者index进行合并
先为dataframe设置key,在key处合并

df1=pandas.DataFrame({'key':['K0','K1','K2','K3'],'A':['A0','A1','A2','A3'],'B':['B0','B1','B2','B3']})
df2=pandas.DataFrame({'key':['K0','K1','K2','K3'],'C':['C0','C1','C2','C3'],'D':['D0','D1','D2','D3']})

print(df1)
print(df2)

res=pd.merge(df1,df2,on='key')
print(res)

python替换列表的空值 python某一列空值替换_pandas_08


两个key分别是key1,key2,对于这两个公共列进行合并,默认为inner,即保留相同一行

df1=pandas.DataFrame({'key1':['K0','K1','K1','K0'],'key2':['K0','K1','K2','K2'],'A':['A0','A1','A2','A3'],'B':['B0','B1','B2','B3']})
df2=pandas.DataFrame({'key1':['K0','K0','K1','K1'],'key2':['K2','K1','K2','K0'],'C':['C0','C1','C2','C3'],'D':['D0','D1','D2','D3']})

print(df1)
print(df2)

res=pd.merge(df1,df2,on=['key1','key2'])
print(res)

python替换列表的空值 python某一列空值替换_学习_09

默认how=’inner’

若how=‘outer’

res=pd.merge(df1,df2,on=['key1','key2'],how='outer')

python替换列表的空值 python某一列空值替换_python替换列表的空值_10


res=pd.merge(df1,df2,notallow=[‘key1’,‘key2’],how=‘right’)

python替换列表的空值 python某一列空值替换_python替换列表的空值_11


res=pd.merge(df1,df2,notallow=[‘key1’,‘key2’],how=‘left’)

python替换列表的空值 python某一列空值替换_python替换列表的空值_12


当加上参数indicator时就会有一列显示连接方式

python替换列表的空值 python某一列空值替换_学习_13


也可以给indicator那一列的索引改名字 indicator=‘新名字’

merge的另一种合并方式:index,写法类似,只不过把key换成了索引

df1=pandas.DataFrame({'A':['A0','A1','A2','A3'],'B':['B0','B1','B2','B3']},index=['K0','K1','K2','K3'])
df2=pandas.DataFrame({'C':['C0','C1','C2','C3'],'D':['D0','D1','D2','D3']},index=['K0','K2','K3','K4'])
#注意index要放在后面

print(df1)
print(df2)

res=pd.merge(df1,df2,left_index=True,right_index=True,how='outer')
print(res)

python替换列表的空值 python某一列空值替换_python_14


当两个dataframe的某一属性是相同的但是又想在合并之后加以区分时可以在参数中加入suffixes=[‘后缀一’,‘后缀二’]

pandas的可视化

data = pd.Series(np.random.randn(1000), index=np.arange(1000))#生成线性的1000个数据
data = data.cumsum()#生成的100个数据累加
data.plot()
plt.show()#打印结果

DataFrame.plot( )函数用于画图,默认为折线图

DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False, 
                sharex=None, sharey=False, layout=None,figsize=None, 
                use_index=True, title=None, grid=None, legend=True, 
                style=None, logx=False, logy=False, loglog=False, 
                xticks=None, yticks=None, xlim=None, ylim=None, rot=None,
                xerr=None,secondary_y=False, sort_columns=False, **kwds)

python替换列表的空值 python某一列空值替换_学习_15

data = pd.DataFrame(np.random.randn(1000, 4), index=np.arange(1000), columns=list("ABCD"))#生成一个具有4个属性的100个数据的dataframe
data = data.cumsum()#累加
data.plot()
plt.show()

python替换列表的空值 python某一列空值替换_学习_16

data = pd.DataFrame(np.random.randn(1000, 4), index=np.arange(1000), columns=list("ABCD"))#生成一个具有4个属性的100个数据的dataframe
data = data.cumsum()#累加
ax = data.plot.scatter(x='A', y='B', color='DarkBlue', label="Class 1")#只有x和y两个属性
data.plot.scatter(x='A', y='C', color='LightGreen', label='Class 2', ax=ax)#把这个附在之前的ax上,scatter只能针对dataframe数据

plt.show()

结果如下:

python替换列表的空值 python某一列空值替换_python替换列表的空值_17