在Pandas

时间:2017-07-04 07:04:11

标签: python pandas

抱歉,我有一个非常简单的问题。所以我有两个看起来像的数据帧 数据帧1: 列:a b c d e f g h

数据帧2: 专栏:e ef

我正在尝试在第e列的Dataframe 1上加入Dataframe 2,这应该会产生 列:a b c d e ef g h 要么 列:a b c d e f g h ef

然而: 当我打印出来时,df1.merge(df2,how ='inner',on ='e')会产生一个空白数据帧。

'outer'合并仅垂直扩展数据帧(就像使用追加函数一样)。

非常感谢一些帮助,谢谢!

3 个答案:

答案 0 :(得分:1)

您需要相同的dtypes列才能加入,因此需要转换:

#convert string column to int
df1['e'] = df1['e'].astype(int)
#inner is default value, so can be omit
df1.merge(df2, on = 'e') 

样品:

df1 = pd.DataFrame({'a':list('abcdef'),
                   'b':[4,5,4,5,5,4],
                   'c':[7,8,9,4,2,3],
                   'd':[1,3,5,7,1,0],
                   'e':['5','3','6','9','2','4'],
                   'f':list('aaabbb'),
                   'g':[1,3,5,7,1,0]})

print (df1)
   a  b  c  d  e  f  g
0  a  4  7  1  5  a  1
1  b  5  8  3  3  a  3
2  c  4  9  5  6  a  5
3  d  5  4  7  9  b  7
4  e  5  2  1  2  b  1
5  f  4  3  0  4  b  0

df2 = pd.DataFrame({'ef':[10,30,50,70,10,100],
                   'e':[5,3,6,9,0,7]})
print (df2)
   e   ef
0  5   10
1  3   30
2  6   50
3  9   70
4  0   10
5  7  100
df1['e'] = df1['e'].astype(int)
df = df1.merge(df2, on = 'e') 
print (df)
   a  b  c  d  e  f  g  ef
0  a  4  7  1  5  a  1  10
1  b  5  8  3  3  a  3  30
2  c  4  9  5  6  a  5  50
3  d  5  4  7  9  b  7  70

答案 1 :(得分:0)

而不是

df1.merge(...)

尝试:

pd.merge(left = df1,right = df2,on ='e',how ='inner')

答案 2 :(得分:0)

你可以这样做:

def mergeDfs(df1,df2):
    newDf = dict()
    dfList = []
    for i in df1:
        l = len(i)
        row = []
        for j in range(l):
            row.append(df1[i][j])
        newDf[i] = row
        dfList.append(i)
    for i in df2:
        l = len(i)
        row = []
        if i not in dfList:
            for j in range(l):
                row.append(df2[i][j])
            newDf[i] = row
    df = pd.DataFrame(newDf)
    return df