在具有混合值的数据框架中区分0和False的简便方法

Abe*_*Abe 5 python dataframe pandas

我的数据框中有一列,其中的值1, 0, False除了具有FalseO在功能上不同的行之外.

因此,我想将False0值转换为其他内容

这样做的好方法是什么?

使用替换效果不佳

df["col_name"] = df["col_name"].replace(0,2)转换False值也是如此

df["col_name"] = df["col_name"].replace(False,2)转换0值也是如此

jez*_*ael 6

您可以使用maska替换值boolean mask- 此解决方案的优点是没有原始types更改:

df = pd.DataFrame({'Col':[1, False, 0]})

df['Col'] = df['Col'].mask(df['Col'].astype(str) == '0', 2).replace(False, 3)
print (df)
   Col
0    1
1    3
2    2
Run Code Online (Sandbox Code Playgroud)

与解决方案Series.replace通过dict,但首先转换为str通过astype作品太多,但一般这一切值转换为str真实的数据还有什么能问题.

d = {'0':'Zero', 'False':False}
df = df['Col'].astype(str).replace(d)
print (df)
0        1
1    False
2     Zero
Name: Col, dtype: object
Run Code Online (Sandbox Code Playgroud)

我尝试创建一个更通用的解决方案map和检查bools通过isinstance:

df = pd.DataFrame({'Col':[1, False, 0, True,5]})
print (df)
     Col
0      1
1  False
2      0
3   True
4      5

m = df['Col'].apply(lambda x: isinstance(x, bool))
df['Col'] = df['Col'].mask(m, df['Col'].map({False:2, True:3}))

print (df)
  Col
0   1
1   2
2   0
3   3
4   5
Run Code Online (Sandbox Code Playgroud)