尝试在两列上合并两个数据框时,类型为“ NoneType”的对象没有len()

时间:2018-10-26 20:04:59

标签: python pandas

我有两个具有两个重叠列的数据框:NumberID和Amount。我的NumberID不够独特,不足以在该列上进行简单的左连接,但是当与Amount结合使用时,它是唯一的。我希望能够在这两列中的值相等时将df2合并到df1上,如果不相等,则用NaN传递/填充。到目前为止,我已经编写了以下代码:

pd.merge(df1, df2, how='left', left_on=['Number', 'Amount'])

但是会引发以下错误:object of type 'NoneType' has no len()

我已经确认两个数据帧的两列中的任何一列都没有空值。但是,我确实在每个df中分散了空值(但在不同的列中)。有没有办法忽略NoneType值?还是有更好的方法来完成我想要的?我考虑过还要在df.iterrows中执行if语句,例如:

   for rows, index in df1.iterrows:
        if df1[['Number', 'Amount'] = df2[['Number', 'Amount']] 
        then rows(pd.concat([df1, df2], axis=1) 
else pass

但是我的语法不太正确。有帮助吗?

1 个答案:

答案 0 :(得分:0)

不是真正的解决方案(在没有一些示例数据的情况下很难重现),但至少我认为您的语法应遵循以下原则:

df1_2_list = []
for index, row in df1.iterrows(): #index should be before row and you missed parentheses
    if len(df2[df2['Number', 'Amount'] == row['Number', 'Amount']]) >0: # You should check for the line 'row' instead of matching the whole df1. Here I sliced df2 based on the number and amount in the row from df1. If this is a match, the len(...) should return a length > 0
        df1_2_list.append([row, df2[df2['Number', 'Amount'] == row['Number', 'Amount']]])
    else:
        df1_2_list.append([row])

df1_2 = pd.concat(df1_2_list, names=[df1.colums, df2.columns])

再次,这可能还行不通,但希望能为您指明正确的方向。

但是合并也应该可行。

能否仅发布df1 / df2的某些行(如果敏感,只要它能正确表示您的数据,就可以是伪数据)?