python--pandas合并与连接

Python016

python--pandas合并与连接,第1张

append 方法根据行在原数据框添加新的数据框。

如果想要合并后的数据框索引重写排序,可以设置参数 ignore_index=True 。

concat 函数是panda自带的,可以按行或按列合并多个pandas数据框。

按行合并多个数据框,需要注意的是 objs参数接受一个可迭代对象 。concat函数默认按行合并。

设置 ignore_index=True ,使合并后的数据框索引重新排序。

按行合并时,concat对所有的列进行全连接(参数 join='outer' ),没有的列会填充为NaN。

设置参数 join='inner' ,可以只保留共有的列。

设置参数 axis=1 或 axis='columns' ,可以按列合并多个数据框。

merge 方法根据列或索引连接数据框。

当两个数据框只有一个相同列时, merge 方法会自动根据相同列进行内连接, on 参数可以省略。

设置参数 how=['left','right','outer','inner','cross'] ,可以完成不同类型的连接。

当两个数据框没有相同列时,需要设置 left_on 和 right_on 参数,表示按这两列进行连接。

如果需要根据数据框的索引进行连接,需要根据需求设置参数 left_index=True 或者 right_index=True 。

设置 suffixes ,可以给相同的列名添加后缀。默认后缀是 _x , _y 。

join 方法与 merge 方法作用相同,基本上 merge 方法已经可以完成所有的连接操作。

join 方法对按索引连接更方便而已。

当连接的两个数据框中没有相同列时,可以直接按索引进行左连接。

同样,可以设置 how 参数,控制连接的行为。

当数据框中有相同列时,需要设置后缀。

假设我有3个不同的清单

col1 = ['2006-03-28','2006-04-05','2006-04-06']col2 = ['IBM', 'MSFT', 'IBM']col3 = [1000, 1000, 500]

将这些列表合并到另一个列表中的最有效方法是:

col = [('2006-03-28', 'IBM', 1000),

('2006-04-05', 'MSFT', 1000),

('2006-04-06', 'IBM', 500)]

解决方案

>>>col1 = ['2006-03-28','2006-04-05','2006-04-06']>>>col2 = ['IBM', 'MSFT', 'IBM']>>>col3 = [1000, 1000, 500]>>>zip(col1, col2, col3)[('2006-03-28', 'IBM', 1000), ('2006-04-05', 'MSFT', 1000), ('2006-04-06', 'IBM', 500)]

如果您的列已在一个列表中,则可以使用 zip(*cols)

由于集合元素顺序的不确定性

下面程序合并后的行顺序不确定,但符合同一值只取一个的要求

originfile=open(r'origin.txt') #打开储存数据的文件

myset=set() #建立集合myset

for line in originfile.readlines(): #读取文件每一行

line=line.strip() #去掉每行前面和后面的空格和换行符

myset.add(line) #将数字加人集合,由于集合的唯一性,已有值不会添加

result=','.join(myset)#逗号隔开,合并集合为一个字符串

targetfile=open(r'target.txt','w')#打开目标文件写入

targetfile.write(result) #将结果写入目标文件

originfile.close() #关闭原始文件

targetfile.close() #关闭目标文件