【问题标题】:Pandas fillna with method=None (default value) raises an error带有 method=None (默认值)的 Pandas fillna 引发错误
【发布时间】:2020-04-26 19:23:10
【问题描述】:

我正在编写一个函数来帮助两个表之间的 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)的默认值)?

【问题讨论】:

  • 某些函数不能使用默认参数。您可能必须提供一些东西作为方法或值。

标签: python pandas function merge nonetype


【解决方案1】:

您必须使用 '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(这意味着“将数据框中的None 值直接替换为给定的value)更改为{'backfill', 'bfill', 'pad', 'ffill'} 之一(每个都记录在docs 中):

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

【讨论】:

  • 这是公平的。不幸的是,我不想在某些极端情况下使用默认值填充值。谢谢!
猜你喜欢
  • 2022-01-25
  • 2019-02-24
  • 2015-05-31
  • 1970-01-01
  • 2014-11-18
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
相关资源
最近更新 更多