Pandas заполнение методом = Нет (значение по умолчанию) вызывает ошибку - PullRequest
1 голос
/ 09 января 2020

Я пишу функцию для облегчения слияния DataFrame между двумя таблицами. Функция создает ключ сопоставления в первом DataFrame, используя переменные во втором DataFrame.

Моя проблема возникает, когда я пытаюсь включить .fillna (method =) в конец функции.

# Import libraries
import pandas as pd

# Create data
data_1 = {"col_1": [1, 2, 3, 4, 5], "col_2": [1, , 3, , 5]}
data_2 = {"col_1": [1, 2, 3, 4, 5], "col_3": [1, , 3, , 5]}

df = pd.DataFrame(data_1)
df2 = pd.DataFrame(data_2)

def merge_on_key(df, df2, join_how="left", fill_na=None):
    # Import libraries
    import pandas as pd

    # Code to create mapping key not required for question

    # Merge the two dataframes
    print(fill_na)
    print(type(fill_na))
    df3 = pd.merge(df, df1, how=join_how, on="col_1").fillna(method=fill_na)

    return df3

df3 = merge_on_key(df, df2)

output:
>>> None
>>> <class 'NoneType'>

error message:
ValueError: Must specify a fill 'value' or 'method'

Мой вопрос: почему fill_na, равное None, не позволяет fillna (method = None, значение по умолчанию для fillna (method))?

1 Ответ

1 голос
/ 09 января 2020

Вы должны использовать 'value' или 'method' . При вызове на fillna вы устанавливаете их обоих на None. Короче говоря, вы говорите Python заполнять пустые (None) значения в кадре данных с None, что ничего не делает и, следовательно, вызывает исключение.

Исходя из документов ( ссылка ), вы можете либо присвоить непустое значение:

df3 = pd.merge(df, df1, how=join_how, on="col_1").fillna(value=0, method=fill_na)

, либо изменить метод с None (что означает «напрямую замените значения None в кадре данных указанным value) на одно из {'backfill', 'bfill', 'pad', 'ffill'} (каждое задокументировано в документах ):

df3 = pd.merge(df, df1, how=join_how, on="col_1").fillna( method='backfill')
...