Python 如何替换数字列中的字符串分隔符(,)?
我试图将“数量”列转换为int “数量”列具有用于数值的字符串(,)分隔符或分隔符 使用代码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行的熊猫数据帧。我添
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')