组合2个表没有标题(与公共列)

时间:2015-09-29 08:34:50

标签: python pandas

我有两张桌子,比如说:

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 column1table2 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导出为文本文件。

2 个答案:

答案 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)

你可以轻松做些什么(我认为df1df2是你的两张桌子):

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