【问题标题】:AttributeError: 'str' object has no attribute 'rint' - How to replace or ignore text in the number columnAttributeError: 'str' object has no attribute 'rint' - 如何替换或忽略数字列中的文本
【发布时间】:2019-02-16 00:57:28
【问题描述】:

我正在尝试将计算出的数字列添加到 csv 文件中。但是,这些列包含一些文本作为字符串(不应该存在),所以当我尝试运行代码时,我收到了AttributeError。任何人都知道如何删除数字列中的所有字符串(即将字符串列变为浮点数)。否则,我尝试忽略错误,但 except 函数没有帮助。

import pandas as pd

try:
    df = pd.read_csv('test.csv')        
    df['new_numbers_column'] = (df['numbers_column']+2)
    df.to_csv('test.csv', index=False)
except AttributeError:
    pass

【问题讨论】:

  • 您能否提供minimal reproducible example 一些示例数据和您的预期输出?这可以通过pd.Series.str.extract 或仅pd.to_numeric 轻松完成,但是如果没有样本数据,很难知道您是否需要从带有文本的列中实际提取数字,或者只是将所有错误行强制转换为NaN
  • 您好,感谢您的回复,这里是样表
  • df = pd.DataFrame({'B':['a',7, 8], 'C':[7,8,9]})

标签: python string pandas attributeerror


【解决方案1】:

使用errors参数:

df = pd.DataFrame({'B':['a',7, 8], 'C':[7,8,9]})

df.apply(pd.to_numeric, errors='coerce')

输出:

     B  C
0  NaN  7
1  7.0  8
2  8.0  9

注意:Pandas 将任何具有 NaN 值的数字 dtype 列转换为浮点数。

【讨论】:

  • 谢谢,这在理论上应该可行,但是当我运行它时,字符串没有任何反应。你知道为什么会发生这种情况吗(即我也更新了 Pandas,因为我知道这个功能可能不适用于旧版本)。
  • 可能是因为我正在从文件中读取我的数据集:df = pd.read_csv('file')
  • 您是否将您的函数重新分配给现有变量?此应用不是“就地”功能,因此您需要重新分配才能看到更改。
  • @IvanS 如果这个解决方案对你有帮助,你会upvote and accept吗?
猜你喜欢
  • 2020-04-26
  • 2017-05-10
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
相关资源
最近更新 更多