【问题标题】:how to convert N/A's (NaT) to 0 in pandas如何在熊猫中将 N/A (NaT) 转换为 0
【发布时间】:2019-08-06 19:52:43
【问题描述】:

我在我的 pandas 数据框中得到以下输出;似乎是因为我很少对某些记录使用null 值:

Cannot convert non-finite values (NA or inf) to integer

如何在 python/pandas 中编写处理程序或其他内容,将我很少使用的 N/A 记录值转换为 0 - 当它们出现时,我的脚本可以继续;大概是为了解决这个问题?


下面是我的代码;尝试使用 fillna() - 此代码添加删除了数据帧输出中的“无法转换非有限值..”错误。

但是,对于那些很少记录的记录,它仍然在 pandas 数据框输出中显示 NaT

for row in excel_data.itertuples():
            mrn = row.MRN

            if mrn in ("", " ", "N/A", None) or math.isnan(mrn):
                print(f"Invalid record: {row}")
                excel_data = excel_data.drop(excel_data.index[row.Index])
                excel_data = excel_data.fillna(0) # attempt
                continue
            else:
                num_valid_records += 1

        print(f"Processing #{num_valid_records} records")

        return self.clean_data_frame(excel_data)

【问题讨论】:

  • 寻找df.fillna(0) ?
  • 你可以删除 NA 行,你可以用isnan() 找到它们并替换它们,你可以使用np.nan_to_num,你可以......你明白了。你研究过这个吗?
  • @roganjosh 是的;我想找到它们并用 0 替换它们。
  • 您可能想查看fillna(),否则您可以创建一个可重现的示例。也来看看@this

标签: python pandas selenium


【解决方案1】:

这里是一个使用fillna()的例子:

df = pd.DataFrame([[1, 2, np.nan],
                   [5, np.nan, 7]],
                   columns=list('ABC'))
df

       A    B    C
    0  1  2.0  NaN
    1  5  NaN  7.0

df.fillna(0)

       A    B    C
    0  1  2.0  0.0
    1  5  0.0  7.0

【讨论】:

  • 谢谢,看起来不错;但是我的记录在熊猫数据框中输出的是 NaT 而不是 NaN。
  • @No-Spex 两者都是一样的。如果有日期,NaNNaT
  • 好的.....我在我的代码中尝试了你的建议(上面,添加到 OP),它删除了 pandas '无法转换错误/输出'但是记录仍然在数据框中输出为 NaT .
  • 如果您可以提供一个包含日期的示例数据框,我们可以使用它来运行您的代码并查看错误,这将更容易提供帮助。
猜你喜欢
  • 2021-03-22
  • 2020-10-06
  • 2018-06-02
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多