我有两张桌子,比如说:
table1 = 101 1 2 3
201 4 5 6
301 7 8 9
table2 = 10 11 101 12
13 14 201 15
16 17 301 18
很明显,table1 column1
和table2 column 3
是相同的列。我想使用pd.join
加入这两个表,但问题是我的表没有header
。那么我该如何使用pandas
?
我正在使用pd.read_csv
来阅读表格。我的表格是文本文件。
outputtable = 101 1 2 3 10 11 12
201 4 5 6 13 14 15
301 7 8 9 16 17 18
我希望将outputtable
导出为文本文件。
答案 0 :(得分:1)
我将索引设置为要合并的序数列,然后合并,重命名索引名称,因为之后需要重置索引:
In [121]:
import io
import pandas as pd
# read in data, you can ignore the io.StringIO bit and replace with your paths
t="""101 1 2 3
201 4 5 6
301 7 8 9"""
table1 = pd.read_csv(io.StringIO(t), sep='\s+', header=None)
t1="""10 11 101 12
13 14 201 15
16 17 301 18"""
table2 = pd.read_csv(io.StringIO(t1), sep='\s+', header=None)
# merge the tables after setting index
merged = table1.set_index(0).merge(table2.set_index(2), left_index=True, right_index=True)
# rename the index name so it doesn't bork complaining about column 0 existing already
merged.index.name = 'index'
merged = merged.reset_index()
merged
Out[121]:
index 1_x 2 3_x 0 1_y 3_y
0 101 1 2 3 10 11 12
1 201 4 5 6 13 14 15
2 301 7 8 9 16 17 18
您现在可以根据需要导出df并传递header=False
:
In [124]:
merged.to_csv(header=False, index=False)
Out[124]:
'101,1,2,3,10,11,12\n201,4,5,6,13,14,15\n301,7,8,9,16,17,18\n'
答案 1 :(得分:0)
你可以轻松做些什么(我认为df1
和df2
是你的两张桌子):
l1 = [''.join(df1.applymap(str)[c].tolist()) for c in df1]
l2 = [''.join(df2.applymap(str)[c].tolist()) for c in df2]
indexes = [l1.index(i) for i in list(set(l1)-set(l2))]
In [194]: pd.concat([df2, df1.ix[:,indexes]], axis=1)
Out[194]:
0 1 2 3 1 2 3
0 10 11 101 12 1 2 3
1 13 14 201 15 4 5 6
2 16 17 301 18 7 8 9