Python 使用空列表作为Series.fillna的填充值

Python 使用空列表作为Series.fillna的填充值,python,pandas,dataframe,series,Python,Pandas,Dataframe,Series,我需要将列'FocusColumn'中的NaN值更改为空列表 我试着这样做: df['FocusColumn'].fillna([],inplace=True) 但它给我带来了以下错误: 337 if validate_scalar_dict_value and isinstance(value, (list, tuple)): 338 raise TypeError( 339 '"value" p

我需要将列
'FocusColumn'
中的NaN值更改为空列表


我试着这样做:

df['FocusColumn'].fillna([],inplace=True)
但它给我带来了以下错误:

337         if validate_scalar_dict_value and isinstance(value, (list, tuple)):
338             raise TypeError( 
339                 '"value" parameter must be a scalar or dict, but 
340                 f'you passed a "{type(value).__name__}"'
341             )
TypeError: "value" parameter must be a scalar or dict, but you passed a "list"

正确的方法是什么?

看起来您可以通过向
Series.fillna提供dict来解决这个问题

>>> df
   FocusColumn
0          NaN
1          1.0
2          NaN
>>> df['FocusColumn'].fillna({i: [] for i in df.index})
0    []
1     1
2    []
Name: FocusColumn, dtype: object
注:

  • 令人惊讶的是,这只适用于
  • 对于缺少很少值的大型序列,这可能会创建不合理数量的一次性空列表
  • 使用
    pandas
    1.0.5进行测试

  • 您可以尝试以下方法:

    import pandas as pd
    import numpy as np 
    
    df = pd.DataFrame({'FocusColumn': [1, 2, 3, 4, np.NaN, np.NaN, np.NaN, np.NaN], 'Column1': [1, 2, 3, 4, 5, 6, 7, 8], 'Column2': [7, 8, 6, 5, 7, 8, 5, 4]})
    
    df['FocusColumn'] = df['FocusColumn'].apply(lambda x: [] if np.isnan(x) else x)
    print(df)
    
    输出:

      FocusColumn  Column1  Column2
    0           1        1       7
    1           2        2       8
    2           3        3       6
    3           4        4       5
    4          []        5       7
    5          []        6       8
    6          []        7       5
    7          []        8       4
    

    是否有特定的原因让您填写此列表?为什么不设置一个字符串值或一个浮点值呢?我对此投了更高的票,因为我不知道
    fillna
    不能很好地处理列表,但你应该问问自己为什么要将列表放入数据帧中。您正在失去
    pandas
    的大部分速度和便利性。因为我将该数据帧导出为Json,并且需要该字段作为列表,这是否回答了您的问题?我认为这个问题可以重新讨论,因为它侧重于在单个列/系列中填充缺失值,这与在数据帧(链接重复)中填充缺失值的工作方式有着惊人的不同。最好通过for循环创建它,
    df.iloc[0,0]。append([0])
    []此处具有相同的id~它仅适用于Series,因为对于DataFrame.fillna,dict值适用于列。您可以在数据帧中使用参数
    {i:[]表示df.columns}
    。@GregoryShimansky我得到
    TypeError:“value”参数必须是标量或dict,但当我尝试
    df.fillna({i:[]表示df.columns})时,您传递了一个“list”
    pandas
    1.2.3OP不想检查字符串
    'NaN'
    ,而是检查
    np.NaN
    。(与自身进行比较时给出
    False
    )同意,最好使用标准方法测试
    NaN
    ,而不是
    =