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'
有更直接的解决方案吗?
答案 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