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
,而不是=
。