Pandas fillna with method=None(默认值)引发错误
Pandas fillna with method=None (default value) raises an error
我正在编写一个函数来帮助 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'
我的问题是为什么等于 None 的 fill_na 不允许 fillna(method=None,fillna(method) 的默认值)?
您必须使用 'value' 或 'method'。在您对 fillna
的调用中,您将它们都设置为 None
。简而言之,你告诉 Python 用 None
填充数据帧中的空值 (None
),这什么都不做,因此它引发了一个例外。
根据文档 (link),您可以分配一个非空值:
df3 = pd.merge(df, df1, how=join_how, on="col_1").fillna(value=0, method=fill_na)
或将方法从 None
(这意味着“用给定的 value
直接替换数据框中的 None
值)更改为 {'backfill', 'bfill', 'pad', 'ffill'}
之一(每个记录在 docs):
df3 = pd.merge(df, df1, how=join_how, on="col_1").fillna( method='backfill')
我正在编写一个函数来帮助 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'
我的问题是为什么等于 None 的 fill_na 不允许 fillna(method=None,fillna(method) 的默认值)?
您必须使用 'value' 或 'method'。在您对 fillna
的调用中,您将它们都设置为 None
。简而言之,你告诉 Python 用 None
填充数据帧中的空值 (None
),这什么都不做,因此它引发了一个例外。
根据文档 (link),您可以分配一个非空值:
df3 = pd.merge(df, df1, how=join_how, on="col_1").fillna(value=0, method=fill_na)
或将方法从 None
(这意味着“用给定的 value
直接替换数据框中的 None
值)更改为 {'backfill', 'bfill', 'pad', 'ffill'}
之一(每个记录在 docs):
df3 = pd.merge(df, df1, how=join_how, on="col_1").fillna( method='backfill')