объект типа 'NoneType' не имеет len () при попытке объединить два кадра данных в двух столбцах - PullRequest
0 голосов
/ 26 октября 2018

У меня есть два кадра данных с двумя перекрывающимися столбцами: 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? Или есть лучший способ выполнить то, что я хочу? Я подумал также о том, чтобы сделать оператор if внутри df.iterrows, что-то вроде:

   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 голосов
/ 27 октября 2018

Не настоящее решение (трудно воспроизвести без некоторых образцов данных), но, по крайней мере, я думаю, что ваш синтаксис должен выглядеть примерно так:

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 (могут быть фиктивные данные, если они чувствительны, если они правильно представляют ваши данные)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...