sub = 'X'
(df.applymap(lambda x: [sub if (pd.isna(e) or e=='')
else e for e in x]
if isinstance(x, list) else x)
.replace('', float('nan'))
.fillna(sub)
)
输出:
col1 col2 col3 col4
0 X Jhon [X, 1, 2] [k, j]
1 1.0 X [1, 1, 5] 3
2 2.0 X X X
3 3.0 Samy [1, 1, X] [b, X]
2条答案
按热度按时间toiithl61#
你必须分别处理这三种情况(空字符串,NaN,列表中的NaN)。
对于列表中的NaN,您需要循环遍历每个出现的元素,并逐个替换元素。
applymap
速度较慢,因此如果您事先知道要使用的列,则可以对它们进行子集设置 *对于空字符串,将它们替换为NaN,然后是
fillna
。输出:
使用的输入:
ou6hu8tu2#
我有一个非常类似的问题,经过一些研究,我想出了一个解决方案,工作得很好。该解决方案确实需要任何关于包含NA先验列的知识。该解决方案在另一个线程中简要描述。
https://stackoverflow.com/questions/33199193/how-to-fill-dataframe-nan-values-with-empty-list-in-pandas/76043985#76043985