从 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.replacedf.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 ApplesGood 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 数据框列中的对象中删除逗号的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 删除数据框列中的多个字符

如何从熊猫数据框中的列中删除字符串值

Pandas:如何将数据框列中的“时间戳”值从对象/字符串转换为时间戳?

从 Pandas 数据框列中删除“秒”和“分钟”

检查列表中的单词并在 pandas 数据框列中删除这些单词

如何一次从熊猫的所有列中删除逗号