【问题标题】:Convert object to int in a dataframe在数据框中将对象转换为 int
【发布时间】:2020-06-12 21:21:07
【问题描述】:

我有一个看起来像这样的数据框

RangeIndex: 144 entries, 0 to 143
Data columns (total 4 columns):
Manager ID      144 non-null object
Defect Count    144 non-null object
Transactions    144 non-null object
DPMO            144 non-null object

我想将缺陷计数、事务和 DPMO 转换为整数以进行一些计算。我使用 astype 将其转换为整数,但它抛出了 valueError。我尝试过的只是“缺陷计数”。我怎样才能一次转换所有 3 个。我也尝试了 to_numeric,但将我的大部分数据转换为“NAN”。 valueError 上的“2,721”是缺陷计数数据之一。

Managers_DPMO['Defect Count'] = Managers_DPMO['Defect Count'].astype(str).astype(int)

ValueError: invalid literal for int() with base 10: '2,721'

【问题讨论】:

  • 您需要删除数据中的逗号或其他非数字字符,pandas 不知道如何将它们解析为数字
  • 您从该错误消息中了解/不了解什么?

标签: python pandas integer valueerror


【解决方案1】:

除了0buz答案,你可以尝试替换剥离有问题的字符,然后将其转换为int:

Managers_DPMO['Defect Count'] = Managers_DPMO['Defect Count'].str.strip(',.').astype(int)

【讨论】:

    【解决方案2】:

    您至少有一个带有逗号千位分隔符的值。 尝试将您的文件读取为:

    df.read_csv('filename.csv', thousands=',')
    

    另一个选项可以是:

    Managers_DPMO['Defect Count']=pd.to_numeric(Managers_DPMO['Defect Count'], downcast='integer')
    

    【讨论】:

    • 是的,有些值带有逗号。我已经使用 append 方法创建了 df 。 Managers_DPMO = Managers_DPMO.append(pd.Series(values,index= columns),ignore_index = True)。我相信 append 没有数千个参数
    • 本打算更新我的答案以反映您的评论,但我看到 @Celius-Stingher 打败了我。
    • @Learner 你能分享更多你的程序吗?请记住,重复附加到 DataFrame 往往会降低性能。
    • 我使用了一个 for 循环从网站获取我想要的所有值。除了追加我想要实现的目标之外,还有其他选择吗? @Celius-Stingher 提到的解决方案适用于单列,但不适用于多列。对于范围内的 i(0,len(rows)): tds = rows[i].find_all('td') 如果 len(tds) == 4: values = [tds[0].text, tds[1]。 text, tds[2].text, tds[3].text] else: values = [td.text for td in tds] Managers_DPMO = Managers_DPMO.append(pd.Series(values,index= columns),ignore_index = True)
    • 改变方法:如果您知道哪些列应该保存int 数据,则在添加到数据框之前应用转换,例如int(tds[1].text)
    猜你喜欢
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 2023-03-14
    • 1970-01-01
    • 2014-12-02
    • 2017-09-26
    相关资源
    最近更新 更多