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

时间:2019-09-17 07:54:57

标签: python pandas dataframe lambda replace

我正试图将“数量”列隐藏为整数。

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

使用代码

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行的熊猫数据框。我添加了数据的开头和结尾

我该怎么做才能解决此问题?

4 个答案:

答案 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)