我在pandas dataframe中有以下数据:
import pandas as pd
data = {'state': ['California', 'New York', 'Florida', 'Texas'],
'1st': ['$11,593,820', '$10,861,680', '$7,942,848', '$7,536,817'],
'2nd': ['$109,264,246', '$45,336,041', '$69,369,589', '$61,830,712'],
'3rd': ['$8,496,273', '$6,317,300', '$4,697,244', '$5,736,941']}
df = pd.DataFrame(data)
state 1st 2nd 3rd
0 California $11,593,820 $109,264,246 $8,496,273
1 New York $10,861,680 $45,336,041 $6,317,300
2 Florida $7,942,848 $69,369,589 $4,697,244
3 Texas $7,536,817 $61,830,712 $5,736,941
我想对三列(1st、2nd、3rd)执行一些简单的分析(例如,sum、groupby),但这三列的数据类型是object(或string)。
因此,我使用以下代码进行数据转换:
df = df.convert_objects(convert_numeric=True)
但是,转换不工作,也许,由于美元符号。有什么建议吗?
6条答案
按热度按时间2cmtqfgy1#
.replace
方法:pandas.Series.replace
用于列pandas.Series.str.replace
用于列pandas.DataFrame.replace
用于多个列,并且无需使用.apply
regex=False
是默认设置,因此设置为regex=True
df[df.columns[1:]]
选择最后三列。*在
python 3.11.4
、pandas 2.1.0
中测试'[^.0-9]'
:删除小数点以外的所有非数字'[^.0-9\-]'
:删除除小数点和负号以外的所有非数字'\D'
:删除所有非数字,包括小数点和负号,因此适用于仅限正整数的列k5ifujac2#
你可以使用向量化的
str
方法来替换不需要的字符,然后将类型转换为int:dtype
变更现已确认:另一种方式:
ztigrdn83#
也可以按如下方式使用
locale
注意上面的代码是在Python 3和Windows环境下测试的
qzwqbdag4#
要转换为整数,请用途:
nzk0hqpo5#
你可以使用方法
str.replace
和正则表达式'\D'
来删除所有非数字字符,或者使用'[^-.0-9]'
来保留减号、小数点和数字:3yhwsihp6#