我正试图将“数量”列隐藏为整数。
数量列具有用于数字值的字符串(,)分隔符或分隔符
使用代码
data['Quantity'] = data['Quantity'].astype('int')
data['Quantity'] = data['Quantity'].astype('float')
我收到此错误:
ValueError: could not convert string to float: '16,000'
ValueError: invalid literal for int() with base 10: '16,000'
Date Quantity
2019-06-25 200
2019-03-30 100
2019-11-02 250
2018-10-23 100
2018-07-17 150
2018-05-31 150
2018-07-05 100
2018-10-04 100
2018-02-23 100
2019-09-16 204
2019-09-16 315
2019-11-09 113
2019-08-29 5
2019-08-23 4
2019-06-18 78
2019-12-06 4
2019-12-06 2
2019-10-03 16,000
2019-07-03 8,000
2018-12-12 32
Name: Quantity, dtype: object
这是一个具有124964行的熊猫数据框。我添加了数据的开头和结尾
我该怎么做才能解决此问题?
答案 0 :(得分:0)
number = '16,000'
act_num = ''
for char in number:
try:
character = int(char)
act_num+=(char)
except:
if char == '-' or char == '.':
act_num+= (char)
print(float(act_num))
答案 1 :(得分:0)
'16,000'
既不是int或float的有效表示形式,并且实际上是模棱两可的-根据语言环境标准,它可能表示16.0
(float)或16000
( int)。
您首先需要指定如何解释此数据,然后修复字符串,使其成为float或int的有效表示形式,然后应用正确类型的asType()
。
要使'16,000'
为有效的浮点表示形式,只需用点替换逗号即可:
val = '16,000'
val = val.replace(",", ".")
要将其设置为整数(值为16000
),只需删除逗号:
val = '16,000'
val = val.replace(",", "")
我不使用熊猫,所以我不知道如何最好地使用数据框来做到这一点,但这确实有据可查。
通常的规则是:当处理来自外部世界(您自己的代码之外的任何内容)的数据时,切勿信任数据,始终确保在使用前验证并清除数据。
答案 2 :(得分:0)
解决方案
# Replace string "," with ""
data["Quantity"] = data["Quantity"].apply(lambda x: str(x.replace(',','')))
data['Quantity'] = data['Quantity'].astype('float')
答案 3 :(得分:-2)
data.Quantity = data.Quantity.astype(str).astype(int)