Pandas 将数据帧的所有非 NaN 条目替换为 1,保留 NaN
Pandas replace all non-NaN entries of a dataframe with 1 leave NaN alone
如何将 pandas 数据帧中的所有非 NaN 值替换为 1 但保留 NaN 值? This 几乎可以满足我的要求。问题是它也使 NaN 值为 0。然后我必须在之后将它们重置为 NaN。
我想要这个
a b
0 NaN QQQ
1 AAA NaN
2 NaN BBB
变成这样
a b
0 NaN 1
1 1 NaN
2 NaN 1
这段代码几乎就是我想要的
newdf = df.notnull().astype('int')
上面的代码就是这样做的
a b
0 0 1
1 1 0
2 0 1
一种方法是select原始数据框中的所有非空值并将它们设置为一个:
df[df.notnull()] = 1
此解决方案适用于您的数据:
df = pd.DataFrame({'a': [np.nan, 'AAA', np.nan], 'b': ['QQQ', np.nan, 'BBB']})
df[df.notnull()] = 1
df
a b
0 NaN 1
1 1 NaN
2 NaN 1
您可以使用 np.where()
和 DataFrame.isna()
来完成这个
df=pd.DataFrame(data=[[1,np.NaN,5],
['q',np.NaN,np.NaN],
['7',{'a':1},np.NaN]],
columns=['a','b','c'])
a b c
0 1 NaN 5.0
1 q NaN NaN
2 7 {'a': 1} NaN
df1=pd.DataFrame(np.where(df.isna(),df,1), columns=df.columns)
a b c
0 1 NaN 1
1 1 NaN NaN
2 1 1 NaN
如何将 pandas 数据帧中的所有非 NaN 值替换为 1 但保留 NaN 值? This 几乎可以满足我的要求。问题是它也使 NaN 值为 0。然后我必须在之后将它们重置为 NaN。
我想要这个
a b
0 NaN QQQ
1 AAA NaN
2 NaN BBB
变成这样
a b
0 NaN 1
1 1 NaN
2 NaN 1
这段代码几乎就是我想要的
newdf = df.notnull().astype('int')
上面的代码就是这样做的
a b
0 0 1
1 1 0
2 0 1
一种方法是select原始数据框中的所有非空值并将它们设置为一个:
df[df.notnull()] = 1
此解决方案适用于您的数据:
df = pd.DataFrame({'a': [np.nan, 'AAA', np.nan], 'b': ['QQQ', np.nan, 'BBB']})
df[df.notnull()] = 1
df
a b
0 NaN 1
1 1 NaN
2 NaN 1
您可以使用 np.where()
和 DataFrame.isna()
来完成这个
df=pd.DataFrame(data=[[1,np.NaN,5],
['q',np.NaN,np.NaN],
['7',{'a':1},np.NaN]],
columns=['a','b','c'])
a b c
0 1 NaN 5.0
1 q NaN NaN
2 7 {'a': 1} NaN
df1=pd.DataFrame(np.where(df.isna(),df,1), columns=df.columns)
a b c
0 1 NaN 1
1 1 NaN NaN
2 1 1 NaN