之路(二)"/>
Pandas的学习之路(二)
嗯···又来了···毕竟还没结束。
接之前的文章,写完了Series和DataFrame,接下来应该是表格的一些操作了。
目录
1、表格的连接
1.1、join操作
1.2、merge操作(连接,可以自动匹配)
1.3、concat(拼接)
2、表格的简单操作
2.1、表格的简单追加
2.2、表格的行列求和
1、表格的连接
1.1、join操作
参数:
- other:第二个Dataframe, Series,或者Dataframe中的列
- on: 第二个DataFrame中与第一个重复的列名
- how: (‘参数可选’left’, ‘right’, ‘outer’, ‘inner’),默认为 ‘left’,left的意思为将左边表格的索引用作连接后的索引,right同理,inner意思为取交集,如果两个表格中有同名的索引,最终显示的结果是同名索引组成的表格,outer是取并集,即为显示将左表与右表的索引全连接起来的表格
- lsuffix: 第一个DataFrame中重复列的后缀
- rsuffix: 第二个DataFrame中重复列的后缀
- sort: 连接键排序,默认为False
上代码:
import pandas as pdalbum_dict = {'平凡的一天':['平凡的一天','给你给我','一荤一素'],'小王日记':['水乡','小王','呓语'],'幼鸟指南':['城市傍晚','海上日记','幼鸟指南']}
album = pd.DataFrame(album_dict)
album1 = pd.DataFrame({'平凡的一天':['消愁','盛夏','无问'],'小王日记':['东北民谣','二零三','胡同'],'幼鸟指南':['极限十七','项羽虞姬','入海']})
album.join(album1,on = None,how = 'left',lsuffix = '_left',rsuffix = '_right',sort = False)
错误代码:
album.join(album1,on = None)
会引发ValueError!!!因为此时的列名重复了,两个办法:要么你把列名改了,要么加上参数lsuffix和rsuffix。
1.2、merge操作(连接,可以自动匹配)
参数说明:
- left: 参与合并的左侧DataFrame
- right: 参与合并的右侧DataFrame
- on: 用于连接的列名,必须存在于左右两个DataFrame之中
- how:可选参数有“inner”,”outer”,”left”,”right”,默认为”inner”
- left_on:左侧DataFrame中用作连接键的列
- right_on: 右侧DataFrame中用作连接键的列
- left_index: 将左侧的行索引用作其连接键
- right_index: 将右侧的行索引用作其连接键
- indicator:如果为True,则将名为_merge的Categorical类型列添加到具有值的输出对象
how='left',连接方式为合并之后第一个DataFrame中与第二个DataFrame中重复的列名的列:
import pandas as pdalbum_dict = {'平凡的一天':['平凡的一天','给你给我','一荤一素'],'小王日记':['水乡','小王','呓语'],'幼鸟指南':['城市傍晚','海上日记','幼鸟指南']}
album = pd.DataFrame(album_dict)
album1 = pd.DataFrame({'平凡的一天':['消愁','盛夏','无问'],'小王日记':['东北民谣','二零三','胡同'],'幼鸟指南':['极限十七','项羽虞姬','入海']})
album2 = pd.merge(album, album1, how='left',on=['平凡的一天','小王日记'],indicator=True)
album2
how='left',连接方式为合并之后第二个DataFrame中与第一个DataFrame中重复的列名的列:
album2 = pd.merge(album, album1, how='right',on='平凡的一天')
album2
使用left_on和right_on进行连接:
import pandas as pdresult = pd.DataFrame({'key':[0,1,2],'key1':[1,2,3],'ab':[4,5,6]})
result1 = pd.DataFrame({'key':[3,2,1],'key1':[2,1,0],'cd':[6,5,4]})final = pd.merge(result,result1,left_on='ab',right_on='cd')
final
使用left_on和right_index=True进行连接:
import pandas as pdresult = pd.DataFrame({'key':[0,1,2],'key1':[1,2,3],'ab':[4,5,6]})
result1 = pd.DataFrame({'key':[3,2,1],'key1':[2,1,0],'cd':[6,5,4]})final = pd.merge(result,result1,left_on='ab',right_index=True)
final
会变成这个亚子,是因为此时使用了 right_index=True进行连接,这时的意思是,将右边的表的索引跟左边表格的列(例子中的是列名为ab那一列)进行关联,而由于二者没有相同元素,所以显示的差不多是个空表了。看看右边表格的索引就明白了,索引为0,1,2。
1.3、concat(拼接)
参数说明:
- object:Series,DataFrame
- axis:需要合并连接的轴,0表示行,1表示列
- keys:选择之后可以创建多索引
- join:可选参数为'inner'和'outer'
final = pd.concat([result,result1])
final
使用keys参数:
final = pd.concat([result,result1],keys = ['x','y'])
final
使用axis参数:(设为1表示沿着列拼接)
final = pd.concat([result,result1], axis=1)
final
使用join参数(就是取交集的意思):
final = pd.concat([result,result1], join='inner')
final
2、表格的简单操作
2.1、表格的简单追加
追加列:
result['key3'] = result.apply(lambda x:x.sum(),axis =1)
result
result = pd.DataFrame({'key':[0,1,2],'key1':[1,2,3],'ab':[4,5,6]})
result1 = pd.DataFrame({'key':[3,2,1],'key1':[2,1,0],'cd':[6,5,4]})
result['test']=[1,2,3]
追加行( ignore_index:如果为True,则将忽略源DataFrame对象中的索引):
ser = pd.Series([9,8,7], index=['key', 'key1', 'ab'])
df = result.append(ser, ignore_index=True)
df
2.2、表格的行列求和
列求和:
result.loc['key2'] = result.apply(lambda x:x.sum(),axis =0)
result
行求和:
result['key3'] = result.apply(lambda x:x.sum(),axis =1)
result
去掉表格中不想要的值:
result = pd.DataFrame({'key':[0,1,2],'key1':[1,2,3],'ab':[4,5,6]})
result1 = pd.DataFrame({'key':[3,2,1],'key1':[2,1,0],'cd':[6,5,4]})
result1[result1['cd']!=6]
更多推荐
Pandas的学习之路(二)
发布评论