从dataframe列的字符串值中删除字符

时间:2020-10-31 16:43:58

标签: python regex pandas string integer

我希望您能帮助我解决这个问题。我有一列以数字值作为字符串。由于它们是来自不同国家的数据,因此其中一些具有不同的格式,例如“,”和“ $”。我正在尝试将一系列转换为数字,但是我在使用“,”和“ $”值时遇到麻烦。

data={"valores":[1,1,3,"4","5.00","1,000","$5,700"]}
df=pd.DataFrame(data)
df

    valores
0   1
1   1
2   3
3   4
4   5.00
5   1,000
6   $5,700

我尝试了以下方法:

df["valores"].replace(",","")

但是它不会改变任何事情,因为“,”值在字符串中,而不是字符串值本身

pd.to_numeric(df["valores"])

但是我收到“ ValueError:无法解析位置5处的字符串“ 1,000””错误。

valores=[i.replace(",","") for i in df["valores"].values]

但是我收到“ AttributeError:'int'对象没有属性'replace'错误。

所以,最后,我尝试了这个:

valores=[i.replace(",","") for i in df["valores"].values if type(i)==str]
valores
['4', '5.00', '1000', '$5700']

但是它跳过了前三个值,因为它们不是字符串。

我认为使用正则表达式代码可以管理它,但是我只是不了解如何使用它。

我一直在努力奋斗约7个小时,希望您能为我提供帮助。

4 个答案:

答案 0 :(得分:1)

您应该首先从中创建一个字符串,这样的事情

valores=[str(i).replace(",","") for i in df["valores"].values]

答案 1 :(得分:0)

默认情况下,

.replace搜索整个单元格值。由于要替换字符串的一部分,因此需要.str.replacereplace(...,regex=True)

df['valores'] = df["valores"].replace(",","", regex=True)

或者:

df['valore'] = df["valores"].str.replace(",","")

答案 2 :(得分:0)

您可以尝试以下方法:

df['valores'] = df['valores'].replace(to_replace='[\,\$]',value='',regex=True).astype(float)

答案 3 :(得分:0)

您需要使用valores.astype(str)列中的值强制转换为字符串,然后使用$删除所有,.str.replace('[,$]', ''),然后您可能使用pd.to_numeric将所有数据转换为数字:

>>> pd.to_numeric(df["valores"].astype(str).str.replace("[,$]",""))
0       1.0
1       1.0
2       3.0
3       4.0
4       5.0
5    1000.0
6    5700.0
相关问题