【问题标题】:Replace incorrectly formatted values in a dataframe替换数据框中格式不正确的值
【发布时间】:2018-03-15 22:53:19
【问题描述】:

我正在使用 pandas 将 Excel 电子表格作为数据框导入。电子表格是手动维护的,并且包含几个数据输入错误,其中最常见的是格式化为带有前导不间断空格 ('\xa0') 的字符串的整数。电子表格会定期更新,因此完全无法预测这些令人讨厌的不一致出现的时间和地点。

基本上,我正在尝试找到一种干净的方法来查找和重新格式化这些值。由于它们主要限于一列,因此我尝试了几个版本:

for entry in df.loc[:, 'col']:
    if type(row) == str:
        row = row.replace(u'\xa0', u'')

如果我在 for 循环内添加一个 print(row) 调用,它会准确地打印出我所期望的结果,即“1187383”变为“1187383”。但是,在for 循环之外,不会替换该值。循环执行后,调用.loc 将返回未更改的条目('1187383')。

我确定我在这里遗漏了一些明显的东西,但我现在已经投入了大约一天的时间来寻找解决方案。任何帮助表示赞赏!如果您需要更多信息,请告诉我。

【问题讨论】:

  • 都是数字?
  • 是的,所有数字。
  • df.replace('[^0-9]','',regex=True).apply(pd.to_numeric) 这行得通吗?
  • 不,很遗憾,这并没有删除空格。
  • 你做了df = df.replace('... 因为它应该至少删除空格

标签: python string pandas type-conversion


【解决方案1】:

我建议尝试Bharath Shetty's suggestion,但会有一点改进:

s = df['col'].astype(str).str.replace('[^0-9.]', '')
df['col'] = pd.to_numeric(s, errors='coerce')

【讨论】:

  • 它工作!而且,正如怀疑的那样,我确实错过了一些明显的东西。谢谢你们的帮助!
  • 我也想发一个答案,但没有数据让我有点害怕放一个。
  • @Bharathshetty 有时你必须实现信念的飞跃。
  • 我从现在开始。 :)
猜你喜欢
  • 2020-08-14
  • 2020-10-06
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
相关资源
最近更新 更多