Python 如何替换数字列中的字符串分隔符(,)?

Python 如何替换数字列中的字符串分隔符(,)?,python,pandas,dataframe,lambda,replace,Python,Pandas,Dataframe,Lambda,Replace,我试图将“数量”列转换为int “数量”列具有用于数值的字符串(,)分隔符或分隔符 使用代码 data['Quantity'] = data['Quantity'].astype('int') 我得到这个错误: ValueError: could not convert string to float: '16,000' ValueError: invalid literal for int() with base 10: '16,000' 资料 这是一个有124964行的熊猫数据帧。我添

我试图将“数量”列转换为int

“数量”列具有用于数值的字符串(,)分隔符或分隔符

使用代码

data['Quantity'] = data['Quantity'].astype('int')
我得到这个错误:

ValueError: could not convert string to float: '16,000'

ValueError: invalid literal for int() with base 10: '16,000'
资料
这是一个有124964行的熊猫数据帧。我添加了数据的开头和结尾

如何解决此问题?

number='16000'
动作数量=“”
对于数字中的字符:
尝试:
character=int(char)
动作数+=(字符)
除:
如果char='-'或char=''.'
动作数+=(字符)
打印(浮点数)

data.Quantity=data.Quantity.astype(str).astype(int)

'16000'
既不是int或float的有效表示形式,实际上格式是不明确的-根据地区标准,它可能表示
16.0
(float)或
16000
(int)

首先需要指定该数据的解释方式,然后修复字符串,使其成为浮点或int的有效表示形式,然后使用正确的类型应用
asType()

要使
'16000'
成为有效的浮点表示形式,只需将逗号替换为点:

val = '16,000'
val = val.replace(",", ".")
要使其成为int(值为
16000
),只需删除逗号:

val = '16,000'
val = val.replace(",", "")
我不使用panda,所以我无法告诉您如何最好地使用数据帧来实现这一点,但这肯定是有文档记录的

作为一般规则:当处理来自外部世界的数据(任何您自己代码之外的数据)时,永远不要信任这些数据,始终确保在使用前对其进行验证和清理。

解决方案

# Replace string "," with ""

data["Quantity"] = data["Quantity"].apply(lambda x: str(x.replace(',','')))

data['Quantity'] = data['Quantity'].astype('float')

这是熊猫数据帧吗?另外,您的数据中不应该有
16000
吗?很抱歉马上关闭它,我的名声太大了。我想知道这是否能解决您的问题,但它不涉及熊猫数据帧。但是
locale
的使用可能是关键。因为在荷兰16000意味着16,但在美国意味着16000。这是一个有124964行的熊猫数据帧。我添加了数据帧的头部和尾部。您是从什么创建数据帧的?csv?但这将16000,-16000,16000都视为same@RemcoGerlich我已经编辑了答案。试过你所有的例子和它works@Krishna它有用吗?我还没有包括在数据帧中循环的部分,但我相信你可以做到that@Sid我无法遍历整个数据帧。也许我不知道怎么做。请检查更新后的问题,让我知道如何解决it@Krishna很抱歉,我不知道如何在Pandas中使用小数点,您必须使用
float
而不是
int
,因此请使用floatint@ShashwatHirapure欢迎来到SO,感谢您的帮助。不幸的是,您的答案是错误的(数据已经是一个字符串,并且这个字符串不能转换为整数),并且不符合好答案的标准(好答案不仅应该提供一个有效的解决方案,而且还应该解释这个解决方案)。它应该被解释为16000。不知何故,我做到了这一点。谢谢你的主意@bruno
val = '16,000'
val = val.replace(",", "")
# Replace string "," with ""

data["Quantity"] = data["Quantity"].apply(lambda x: str(x.replace(',','')))

data['Quantity'] = data['Quantity'].astype('float')