pandas 替换包含特定子字符串的单元格中的字符

pkmbmrz7  于 2022-12-16  发布在  其他
关注(0)|答案(2)|浏览(145)

我有以下设置:

data = pd.DataFrame({
    "a": ["Amount 3,7$", "Amount 6,7$", "Amount 1,3$"],
    "b": ["2,3", " Amount 3,5", "4,7"]
})

我希望查找包含子字符串Amount的所有单元格,并将字符,替换为.
我期望:

a           b
0   Amount 3.7$     2,3
1   Amount 6.7$     Amount 3.5
2   Amount 1.3$     4,7

我试过:

for column in data.columns:
    data[column] = data[column][data[column].str.contains("Amount", na=False)].replace(",", ".", regex=True)

我得到的是:

a           b
0   Amount 3.7$     NaN
1   Amount 6.7$     NaN
2   Amount 1.3$     NaN

不知何故,面罩没有按预期工作

rjee0c15

rjee0c151#

∮ ∮ ∮ ∮ ∮一个月一个月

data.applymap(lambda s: s.replace(',', '.') if 'Amount' in s else s)
a            b
0  Amount 3.7$          2,3
1  Amount 6.7$   Amount 3.5
2  Amount 1.3$          4,7
hm2xizp9

hm2xizp92#

一种方法是:

data["b"] = np.where(data["b"].str.contains("Amount"), data["b"].str.replace(",", "."), data["b"])
print(data)

产出

a            b
0  Amount 3,7$          2,3
1  Amount 6,7$   Amount 3.5
2  Amount 1,3$          4,7

另一种方法是使用以下列表解析:

data["b"] = [x.replace(",", ".") if "Amount" in x else x for x in data["b"]]

如果"Amount"总是在开头,您可以使用更详细的正则表达式,如下所示:

data["b"] = data["b"].str.replace("(.*Amount.*)(,)", r"\1.", regex=True)

相关问题