从 pandas 数据框列中的对象中删除逗号
Posted
技术标签:
【中文标题】从 pandas 数据框列中的对象中删除逗号【英文标题】:Remove comma from objects in a pandas dataframe column 【发布时间】:2016-04-07 12:13:01 【问题描述】:我已经使用 pandas 导入了一个 csv 文件。
我的数据框有多个列,标题为“农场”、“苹果总数”和“好苹果”。
为“Total Apples”和“Good Apples”导入的数字数据包含表示千位的逗号,例如1,200 等 我想删除逗号,使数据看起来像 1200 等。
“Total Apples”和“Good Apples”列的变量类型作为对象出现。
我尝试使用df.str.replace
和df.strip
,但没有成功。
还尝试将变量类型从对象更改为字符串,将对象更改为整数,但无法正常工作。
任何帮助将不胜感激。
****编辑****
使用 pd.read_csv 导入的 csv 文件中的数据摘录:
Farm_Name Total Apples Good Apples
EM 18,327 14,176
EE 18,785 14,146
IW 635 486
L 33,929 24,586
NE 12,497 9,609
NW 30,756 23,765
SC 8,515 6,438
SE 22,896 17,914
SW 11,972 9,114
WM 27,251 20,931
Y 21,495 16,662
【问题讨论】:
文件中的分隔符是什么? 见this question 【参考方案1】:我认为您可以将参数thousands
添加到read_csv
,然后将Total Apples
和Good Apples
列中的值转换为integers
:
也许你的separator
不一样,别忘了改。如果分隔符为空格,则改为sep='\s+'
。
import pandas as pd
import io
temp=u"""Farm_Name;Total Apples;Good Apples
EM;18,327;14,176
EE;18,785;14,146
IW;635;486
L;33,929;24,586
NE;12,497;9,609
NW;30,756;23,765
SC;8,515;6,438
SE;22,896;17,914
SW;11,972;9,114
WM;27,251;20,931
Y;21,495;16,662"""
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp), sep=";",thousands=',')
print df
Farm_Name Total Apples Good Apples
0 EM 18327 14176
1 EE 18785 14146
2 IW 635 486
3 L 33929 24586
4 NE 12497 9609
5 NW 30756 23765
6 SC 8515 6438
7 SE 22896 17914
8 SW 11972 9114
9 WM 27251 20931
10 Y 21495 16662
print df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 11 entries, 0 to 10
Data columns (total 3 columns):
Farm_Name 11 non-null object
Total Apples 11 non-null int64
Good Apples 11 non-null int64
dtypes: int64(2), object(1)
memory usage: 336.0+ bytes
None
【讨论】:
这行得通,但我必须将此添加到我的 read_csv 行:sep=None, thousands=',', engine='python'
@jezrael 感谢您的帮助!【参考方案2】:
试试这个:
locale.setlocale(locale.LC_NUMERIC, '')
df = df[['Farm Name']].join(df[['Total Apples', 'Good Apples']].applymap(locale.atof))
【讨论】:
我尝试了这个并且出现了这个错误消息:ValueError: ('could not convert string to float: -', u'occurred at index Farm')
然后我尝试使用df[[2]].applymap(locale.atof)
指定一个列,但是出现了这个错误:ValueError: ('invalid literal for float(): 1,200', u'occurred at index Total Apples')
您可以发布您的数据摘录吗?
你试过打电话给df['Total Apples'].apply(locale.atof)
吗?
编辑原始问题@Grr 以包含数据。我尝试了您的建议,但收到此错误消息:TypeError: unsupported operand type(s) for /: 'str' and 'str'
感谢您的帮助@Grr。无法让它工作,但使用下面的答案管理它。以上是关于从 pandas 数据框列中的对象中删除逗号的主要内容,如果未能解决你的问题,请参考以下文章