我的数据框中有一个列,其值为O
,但False
或0
的行在功能上有所不同。
我希望将df["col_name"] = df["col_name"].replace(0,2)
或False
值转换为其他值
这样做的好方法是什么?
使用替换效果不佳
df["col_name"] = df["col_name"].replace(False,2)
也会转换0
值
和
v[0]
也会转换v.push_back(temp);
值
答案 0 :(得分:6)
您可以使用mask
将值替换为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
使用dict
str
的解决方案,但Series.replace
首先转换为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
真实的数据可能有问题。
bools
我尝试使用astype
创建更一般的解决方案,然后按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
:
mapView.requestScreenshot();
答案 1 :(得分:4)
让我们使用astype
:
df = pd.DataFrame({'Datavalue':[1,False,0]})
df.Datavalue.astype(str) == "0"
输出:
0 False
1 False
2 True
Name: Datavalue, dtype: bool
df.loc[df.Datavalue.astype(str) == "0",'Datavalue'] = "Zero"
输出:
Datavalue
0 1
1 False
2 Zero
答案 2 :(得分:4)
您可以转换为str类型,然后使用df.str.replace
:
In [223]: df = pd.DataFrame({'Col':[1, False, 0]})
In [224]: df.Col.astype(str).replace('0', 'Zero').replace('False', np.nan)
Out[224]:
0 1
1 NaN
2 Zero
答案 3 :(得分:3)
使用jezrael的数据框df
df = pd.DataFrame({'Col':[1, False, 0]})
选项1
如果只有三个值,1,0或False,则bool
类型与False
df.Col.mask(df.Col.apply(type) == bool, 2)
0 1
1 2
2 0
Name: Col, dtype: object
选项2
您可以使用python
is
运算符
False is 0
False
并像之前一样使用mask
df.mask(df.Col.apply(lambda x: x is False), 2)
0 1
1 2
2 0
Name: Col, dtype: object