pandas 在熊猫数据框中搜索和替换点和逗号
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/49088443/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Search and replace dots and commas in pandas dataframe
提问by andrej
This is my DataFrame:
这是我的数据帧:
d = {'col1': ['sku 1.1', 'sku 1.2', 'sku 1.3'], 'col2': ['9.876.543,21', 654, '321,01']}
df = pd.DataFrame(data=d)
df
col1 col2
0 sku 1.1 9.876.543,21
1 sku 1.2 654
2 sku 1.3 321,01
Data in col2 are numbers in local format, which I would like to convert into:
col2 中的数据是本地格式的数字,我想将其转换为:
col2
9876543.21
654
321.01
I tried df['col2'] = pd.to_numeric(df['col2'], downcast='float')
, which returns a ValueError: : Unable to parse string "9.876.543,21" at position 0.
我试过df['col2'] = pd.to_numeric(df['col2'], downcast='float')
,它返回一个 ValueError:: Unable to parse string "9.876.543,21" at position 0.
I tried also df = df.apply(lambda x: x.str.replace(',', '.'))
, which returns ValueError: could not convert string to float: '5.023.654.46'
我也试过df = df.apply(lambda x: x.str.replace(',', '.'))
,它返回 ValueError: could not convert string to float: '5.023.654.46'
Thanks for your help!
谢谢你的帮助!
回答by jezrael
回答by holdenweb
You are always better off using standard system facilities where they exist. Knowing that some locales use commas and decimal points differently I could not believe that Pandas would not use the formats of the locale.
使用存在的标准系统设施总是更好。知道某些语言环境以不同的方式使用逗号和小数点,我无法相信 Pandas 不会使用语言环境的格式。
Sure enough a quick search revealed this gist, which explains how to make use of locales to convert strings to numbers. In essence you need to import locale
and after you've built the dataframe call locale.setlocale
to establish a locale that uses commas as decimal points and periods for separators, then apply the dataframe's applymapp
method.
果然,快速搜索揭示了这个要点,它解释了如何利用语言环境将字符串转换为数字。本质上,您需要import locale
在构建数据帧调用locale.setlocale
以建立使用逗号作为小数点和句点作为分隔符的语言环境之后,然后应用数据帧的applymapp
方法。
回答by Tanuj Yadav
You can try
你可以试试
df = df.apply(lambda x: x.replace(',', '&'))
df = df.apply(lambda x: x.replace('.', ','))
df = df.apply(lambda x: x.replace('&', '.'))