Pandas学习笔记(二)
处理丢失数据
删除
a b c d f
0 0.11374 -0.432719 0.252386 0.959131 NaN
1 -1.00000 0.103311 NaN -0.246855 NaN
2 -1.00000 0.785828 NaN 0.929142 NaN
a.dropna(axis=1)#如果在某一列中有nan就将这一列丢掉
Out:
a b d
0 0.11374 -0.432719 0.959131
1 -1.00000 0.103311 -0.246855
2 -1.00000 0.785828 0.929142
#a.dropna(axis = 1,how={'any','all'}) 如果某一列全部为nan则才丢掉
填补
a.fillna(value = 0)
a b c d f
0 0.11374 -0.432719 0.0 0.959131 0.0
1 -1.00000 0.103311 0.0 -0.246855 0.0
2 -1.00000 0.785828 0.0 0.929142 0.0
判断
a b c d f
0 0.11374 -0.432719 NaN 0.959131 NaN
1 -1.00000 0.103311 NaN -0.246855 NaN
2 -1.00000 0.785828 NaN 0.929142 NaN
a.isnull()
a b c d f
0 False False True False True
1 False False True False True
2 False False True False True
#这样看True or False可能会很麻烦,我们可以通过在后面加入判断来更明显的展示是否有nan
np.any(a.isnull())==True
导入与导出
数据存储的时候可以通过 csv的格式进行存储
导入csv数据
#先使用os的一个获取当前目录的脚本
import os
home_path = os.path.dirname(os.path.abspath('__file__'))
#然后再进行导入csv文件
data=pd.read_csv('simple_expamle.csv')
文件格式转换
#在现有的csv格式文件的前提下转换成pickle文件
data,to_pickle('student.pickle')
以csv格式保存文件
# 存储数据,Windows下的存储路径与Linux并不相同
if ox.name == "nt":
data.to_csv("%s\\simple_example.csv" %home_path,index=False)#如果系统是WINDOWS系统则用以下目录格式保存为csv文件
else:
data.to_csv("%s/simple_example.csv" % home_path, index=False)#以Linux格式存储
visualize_data(data)
concatenating 合并DataFrame
#创建三个DataFrame
a b c d
0 0.0 0.0 0.0 0.0
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
a b c d
0 1.0 1.0 1.0 1.0
1 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0
a b c d
0 2.0 2.0 2.0 2.0
1 2.0 2.0 2.0 2.0
2 2.0 2.0 2.0 2.0
#使用pd.concat合并进行竖向合并
res=pd.concat([a,b,c],axis=0)
Out:
a b c d
0 0.0 0.0 0.0 0.0
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
0 1.0 1.0 1.0 1.0
1 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0
0 2.0 2.0 2.0 2.0
1 2.0 2.0 2.0 2.0
重新排序index
d = pd.concat([a,b,c],axis = 0,ignore_index= True)
Out[6]:
a b c d
0 0.0 0.0 0.0 0.0
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
3 1.0 1.0 1.0 1.0
4 1.0 1.0 1.0 1.0
5 1.0 1.0 1.0 1.0
6 2.0 2.0 2.0 2.0
7 2.0 2.0 2.0 2.0
join
#'inner','outer'
#创建两个DataFrame
a = pd.DataFrame(np.ones((3,4))*0,columns = ['a','b','c','d'])
b = pd.DataFrame(np.ones((3,4))*1,columns = ['b','c','d','e'])
#两个DataFrame的columns不重合,我们将其合并后会讲空白部分使用Nan填充
#join = outer
c = pd.concat([a,b],sort=True)
c
Out[13]:
a b c d e
0 0.0 0.0 0.0 0.0 NaN
1 0.0 0.0 0.0 0.0 NaN
2 0.0 0.0 0.0 0.0 NaN
0 NaN 1.0 1.0 1.0 1.0
1 NaN 1.0 1.0 1.0 1.0
2 NaN 1.0 1.0 1.0 1.0
#这是默认的join的outer模式
#join= inner
d = pd.concat([a,b],join = 'inner')
Out[16]:
b c d
0 0.0 0.0 0.0
1 0.0 0.0 0.0
2 0.0 0.0 0.0
0 1.0 1.0 1.0
1 1.0 1.0 1.0
2 1.0 1.0 1.0
# 裁剪相同的部分
reindex
#先创建一个index不同的DataFrame
e = pd.DataFrame(np.ones((3,4))*2,columns = ['a','b','c','d'],index= [2,3,4])
e
Out[23]:
a b c d
2 2.0 2.0 2.0 2.0
3 2.0 2.0 2.0 2.0
4 2.0 2.0 2.0 2.0
#横向合并
res = pd.concat([a,e],axis = 1).reindex(a.index)
res
Out[31]:
a b c d a b c d
0 0.0 0.0 0.0 0.0 NaN NaN NaN NaN
1 0.0 0.0 0.0 0.0 NaN NaN NaN NaN
2 0.0 0.0 0.0 0.0 2.0 2.0 2.0 2.0
#保留a的index,e没有的index的那一排数列使用NaN填充
append
#append效果与pd.concat([a,b],axis=0,ignore_index = True)效果相似
a
Out[40]:
a b c d
0 0.0 0.0 0.0 0.0
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
b
Out[41]:
b c d e
0 1.0 1.0 1.0 1.0
1 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0
result=a.append(b,ignore_index=True,sort = False)
result
Out:
a b c d e
0 0.0 0.0 0.0 0.0 NaN
1 0.0 0.0 0.0 0.0 NaN
2 0.0 0.0 0.0 0.0 NaN
3 NaN 1.0 1.0 1.0 1.0
4 NaN 1.0 1.0 1.0 1.0
5 NaN 1.0 1.0 1.0 1.0
如果想合并多个DataFrame则可以在b处加个列表
result=a.append([c,b],ignore_index=True,sort = False)
#使用appen单独添加一列
list = pd.Series([1,2,3,4],index=['a','b','c','d'])
res = result.append(list,ignore_index=True)