我的数据框中有一列,其中的值采用 1、0、False
,但带有 False
或 O
的行是功能不同。
因此,我想将 False
或 0
值转换为其他值
执行此操作的好方法是什么?
使用替换效果不佳
df["col_name"] = df["col_name"].replace(0,2)
也转换 False
值
和
df["col_name"] = df["col_name"].replace(False,2)
也转换 0
值
最佳答案
您可以使用 mask
用 bool 掩码
替换值 - 这个解决方案的优点是没有原始类型
被改变:
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
解决方案 Series.replace
通过 dict
,但首先通过 astype
转换为 str
也可以工作,但通常它会将所有值转换为 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
我尝试使用 map
创建更通用的解决方案并通过 isinstance
检查 bools
:
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
关于python - 在具有混合值的数据框中区分 0 和 False 的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45229159/