Ani*_* De 16 python dataframe pandas
我有一个71列和30597行的数据帧.我想用1替换所有非nan条目,用0替换nan值.
最初,我尝试对数据帧的每个值进行for循环,这花费了太多时间.
然后我使用了data_new = data.subtract(data),这意味着将数据帧的所有值减去它自己,这样我就可以使所有非空值为0.但是由于数据帧有多个字符串条目,所以发生错误.
fma*_*arc 25
你可以采取的返回值df.notnull(),这是False在数据帧中包含NaN和True否则将其丢至整数,让您0在数据帧是NaN和1其他方式:
newdf = df.notnull().astype('int')
Run Code Online (Sandbox Code Playgroud)
如果你真的想写入原始的DataFrame,这将有效:
df.loc[~df.isnull()] = 1 # not nan
df.loc[df.isnull()] = 0 # nan
Run Code Online (Sandbox Code Playgroud)
jez*_*ael 12
print ((df.notnull()).astype('int'))
Run Code Online (Sandbox Code Playgroud)
样品:
import pandas as pd
import numpy as np
df = pd.DataFrame({'a': [np.nan, 4, np.nan], 'b': [1,np.nan,3]})
print (df)
a b
0 NaN 1.0
1 4.0 NaN
2 NaN 3.0
print (df.notnull())
a b
0 False True
1 True False
2 False True
print ((df.notnull()).astype('int'))
a b
0 0 1
1 1 0
2 0 1
Run Code Online (Sandbox Code Playgroud)
我建议制作一个新专栏而不是仅仅替换。如有必要,您始终可以删除前一列,但通过对另一列的操作填充一列的源总是很有帮助的。
例如,如果 df['col1'] 是现有列
df['col2'] = df['col1'].apply(lambda x: 1 if not pd.isnull(x) else np.nan)
Run Code Online (Sandbox Code Playgroud)
其中 col2 是新列。如果 col2 有字符串条目,也应该有效。