大熊猫对面的熊猫(0)

时间:2015-07-29 19:39:25

标签: python pandas dataframe nan

df.fillna(0)将所有NA / NaN值填充为0,是否有一个函数将所有 -NA / NaN值替换为另一个值,例如1?

如果我的DataFrame中的值是可变长度列表,那么:

  • df.replace()要求列表长度相同
  • 类似df[len(df) > 0] = 1的布尔索引抛出ValueError: cannot insert True, already exists
  • pandas.get_dummies()抛出TypeError: unhashable type: 'list'

有更直接的解决方案吗?

2 个答案:

答案 0 :(得分:4)

您可以使用df[df.notnull()] = 1编制索引/作业。例如:

>>> df = pd.DataFrame([[np.nan, 2, 5], [2, 5, np.nan], [2, 5, np.nan]])
>>> df # example frame
    0  1   2
0 NaN  2   5
1   2  5 NaN
2   2  5 NaN

>>> df[df.notnull()] = 1
>>> df
    0  1   2
0 NaN  1   1
1   1  1 NaN
2   1  1 NaN

答案 1 :(得分:1)

我不知道内置函数,但这有效:

import pandas as pd
import numpy as np

df = pd.DataFrame(data={'a':[np.nan, 13, 32]})

 >>    a
   0  NaN
   1   13
   2   32

df = df.applymap(lambda x: 1 if not np.isnan(x) else x)

 >>     a
    0 NaN
    1   1
    2   1