六、pandas读取和存入csv文件
1、读取文件
file = pd.read_csv('csv文件的路径', encoding='编码格式') # 编码格式如gbk,utf-8等
2、保存文件
file.to_csv('文件要保存到的路径')
七、pandas合并
1、横向拼接、纵向拼接
- 新建三个dataframe数据
import pandas as pd import numpy as np df1 = pd.DataFrame(np.arange(12).reshape((3,4)),columns=['a','b','c','d']) df2 = pd.DataFrame(np.arange(12,24).reshape((3,4)),columns=['a','b','c','d']) df3 = pd.DataFrame(np.arange(24,36).reshape((3,4)),columns=['a','b','c','d']) print(df1) print(df2) print(df3)
输出:
a b c d 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11 a b c d 0 12 13 14 15 1 16 17 18 19 2 20 21 22 23 a b c d 0 24 25 26 27 1 28 29 30 31 2 32 33 34 35
- 实现横向和纵向合并
df4 = pd.concat([df1,df2,df3],axis=0)#纵向合并 df5 = pd.concat([df1,df2,df3],axis=1)#横向合并 print('---------------纵向合并结果---------------') print(df4) print('---------------横向合并结果---------------') print(df5)
输出:
---------------纵向合并结果--------------- a b c d 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11 0 12 13 14 15 1 16 17 18 19 2 20 21 22 23 0 24 25 26 27 1 28 29 30 31 2 32 33 34 35 ---------------横向合并结果--------------- a b c d a b c d a b c d 0 0 1 2 3 12 13 14 15 24 25 26 27 1 4 5 6 7 16 17 18 19 28 29 30 31 2 8 9 10 11 20 21 22 23 32 33 34 35
- 细心的小伙伴可能已经发现了,纵向合并时,index值看上去不太舒服。可以在上述代码的基础上加以补充,实现index值的改变。
df4 = pd.concat([df1,df2,df3],axis=0,ignore_index=True) # ignore_index=True的作用是不考虑表原来的index print(df4)
输出:
a b c d 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11 3 12 13 14 15 4 16 17 18 19 5 20 21 22 23 6 24 25 26 27 7 28 29 30 31 8 32 33 34 35
2、获取两个表的交集和并集
join参数的属性,如果为’inner’得到的是两表的交集,如果是outer,得到的是两表的并集。
- 新建两个dataframe数据
import pandas as pd import numpy as np df1 = pd.DataFrame(np.arange(12).reshape((3,4)),columns=['a','b','c','f']) df2 = pd.DataFrame(np.arange(12,24).reshape((3,4)),columns=['a','c','d','e']) print(df1) print(df2)
输出:
a b c f 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11 a c d e 0 12 13 14 15 1 16 17 18 19 2 20 21 22 23
- 实现得到两张表的交集和并集
df3 = pd.concat([df1,df2],join='outer',ignore_index=True) df4 = pd.concat([df1,df2],join='inner',ignore_index=True) print('------------------并集结果-------------------') print(df3) print('------------------交集结果-------------------') print(df4)
输出:
------------------并集结果------------------- a b c f d e 0 0 1.0 2 3.0 NaN NaN 1 4 5.0 6 7.0 NaN NaN 2 8 9.0 10 11.0 NaN NaN 3 12 NaN 13 NaN 14.0 15.0 4 16 NaN 17 NaN 18.0 19.0 5 20 NaN 21 NaN 22.0 23.0 ------------------交集结果------------------- a c 0 0 2 1 4 6 2 8 10 3 12 13 4 16 17 5 20 21
注意:去并集时,空值的地方用NaN填充
新版本pandas已经删除了join_axes,两个dataframe按照同一列合并的话,可以改用merge
八、pandas合并——merge
- 用字典新建两个dataframe数据:
import pandas as pd left = pd.DataFrame({'key1':['K0','K0','K1','K2'], 'key2':['K0','K1','K0','K1'], 'A':['A0','A1','A2','A3'], 'B':['B0','B1','B2','B3']}) right = pd.DataFrame({'key1':['K0','K1','K1','K3'], 'key2':['K0','K0','K0','K0'], 'C':['C0','C1','C2','C3'], 'D':['D0','D1','D2','D3']}) print(left) print(right)
输出:
- 使用
merge
进行合并 - on: 要加入的列或索引级别名称。 必须在左侧和右侧DataFrame对象中找到。
- 其中how有四个参数:inner、outer、left、right,默认值是inner。 inner的作用是取交集;
outer的作用是取并集;
left的作用是只取左边的表有值的情况;
right的作用是只取右边的表有值的情况。
left和rigth的结果是outer的子集。
res_1 = pd.merge(left,right,on=['key1','key2'],how='inner') res_2 = pd.merge(left,right,on=['key1','key2'],how='outer') res_3 = pd.merge(left,right,on=['key1','key2'],how='left') res_4 = pd.merge(left,right,on=['key1','key2'],how='right') print('-------------------------how的参数取inner的结果--------------------') print(res_1) print('-------------------------how的参数取outer的结果--------------------') print(res_2) print('-------------------------how的参数取left的结果---------------------') print(res_3) print('-------------------------how的参数取right的结果--------------------') print(res_4)
输出:
-------------------------how的参数取inner的结果-------------------- key1 key2 A B C D 0 K0 K0 A0 B0 C0 D0 1 K1 K0 A2 B2 C1 D1 2 K1 K0 A2 B2 C2 D2 -------------------------how的参数取outer的结果-------------------- key1 key2 A B C D 0 K0 K0 A0 B0 C0 D0 1 K0 K1 A1 B1 NaN NaN 2 K1 K0 A2 B2 C1 D1 3 K1 K0 A2 B2 C2 D2 4 K2 K1 A3 B3 NaN NaN 5 K3 K0 NaN NaN C3 D3 -------------------------how的参数取left的结果--------------------- key1 key2 A B C D 0 K0 K0 A0 B0 C0 D0 1 K0 K1 A1 B1 NaN NaN 2 K1 K0 A2 B2 C1 D1 3 K1 K0 A2 B2 C2 D2 4 K2 K1 A3 B3 NaN NaN -------------------------how的参数取right的结果-------------------- key1 key2 A B C D 0 K0 K0 A0 B0 C0 D0 1 K1 K0 A2 B2 C1 D1 2 K1 K0 A2 B2 C2 D2 3 K3 K0 NaN NaN C3 D3
- 加入
indicator
参数可以查看merge
的详细信息
如:
res = pd.merge(left,right,on=['key1','key2'],how='outer',indicator=True) print(res)
输出:
key1 key2 A B C D _merge 0 K0 K0 A0 B0 C0 D0 both 1 K0 K1 A1 B1 NaN NaN left_only 2 K1 K0 A2 B2 C1 D1 both 3 K1 K0 A2 B2 C2 D2 both 4 K2 K1 A3 B3 NaN NaN left_only 5 K3 K0 NaN NaN C3 D3 right_only
indicator的值也可以是字符串参数,在这种情况下,指标函数将使用传递的字符串的值作为指标列的名称。
- 以index为链接键需要同时设置left_index= True 和 right_index= True
如:
res = pd.merge(left,right,left_index=True,right_index=True,how='outer') print(res)
输出:
key1_x key2_x A B key1_y key2_y C D 0 K0 K0 A0 B0 K0 K0 C0 D0 1 K0 K1 A1 B1 K1 K0 C1 D1 2 K1 K0 A2 B2 K1 K0 C2 D2 3 K2 K1 A3 B3 K3 K0 C3 D3
- sort对链接的键值进行排序:
res = pd.merge(left,right,on=['key1','key2'],how='outer',sort=True) print(res)
输出:
key1 key2 A B C D 0 K0 K0 A0 B0 C0 D0 1 K0 K1 A1 B1 NaN NaN 2 K1 K0 A2 B2 C1 D1 3 K1 K0 A2 B2 C2 D2 4 K2 K1 A3 B3 NaN NaN 5 K3 K0 NaN NaN C3 D3
九、pandas plot 画图函数
import pandas as pd import numpy as np import matplotlib.pyplot as plt data = pd.DataFrame(np.random.randn(1000,4),index=np.arange(1000),columns=['A','B','C','D']) data = data.cumsum() print(data.head()) data.plot() plt.show()
输出:
网络异常,图片无法展示
|
注解: 1、numpy.random.randn():返回一个或一组样本,具有标准正态分布。此处为1000行4列的数据 2、data.head(),获取data的前几个数据,head的默认值为5 3、data.cumsum()的一个作用是可以求累加量
十、 参考文章及学习视频
博文中有一些地方的例子是直接引用学习视频中的例子,卑微博主在线感激!
下面是博主参考的一些其它博文和学习视频。
十一、Blogger’s speech
如有不足,还请大佬评论区留言或私信我,我会进行补充。
感谢您的支持,希望可以点赞,关注,收藏,一键三连哟。