python 使用列表替换Pandas数据框中的nan值

utugiqy6  于 2023-04-19  发布在  Python
关注(0)|答案(2)|浏览(144)

如何将nan或空字符串(例如“”)替换为零(如果它存在于任何列中)。

col1  col2    col3            col4 
nan   Jhon    [nan, 1, 2]    ['k', 'j']
1     nan     [1, 1, 5]       3
2     ""      nan             nan
3     Samy    [1, 1, nan]    ['b', '']
toiithl6

toiithl61#

你必须分别处理这三种情况(空字符串,NaN,列表中的NaN)。
对于列表中的NaN,您需要循环遍历每个出现的元素,并逐个替换元素。

  • 注意:applymap速度较慢,因此如果您事先知道要使用的列,则可以对它们进行子集设置 *

对于空字符串,将它们替换为NaN,然后是fillna

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]

使用的输入:

from numpy import nan
df = pd.DataFrame({'col1': {0: nan, 1: 1.0, 2: 2.0, 3: 3.0},
                   'col2': {0: 'Jhon', 1: nan, 2: '', 3: 'Samy'},
                   'col3': {0: [nan, 1, 2], 1: [1, 1, 5], 2: nan, 3: [1, 1, nan]},
                   'col4': {0: ['k', 'j'], 1: '3', 2: nan, 3: ['b', '']}})
ou6hu8tu

ou6hu8tu2#

我有一个非常类似的问题,经过一些研究,我想出了一个解决方案,工作得很好。该解决方案确实需要任何关于包含NA先验列的知识。该解决方案在另一个线程中简要描述。
https://stackoverflow.com/questions/33199193/how-to-fill-dataframe-nan-values-with-empty-list-in-pandas/76043985#76043985

相关问题