如何在熊猫中将 N/A (NaT) 转换为 0

Posted

技术标签:

【中文标题】如何在熊猫中将 N/A (NaT) 转换为 0【英文标题】:how to convert N/A's (NaT) to 0 in pandas 【发布时间】: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 【参考方案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 . 如果您可以提供一个包含日期的示例数据框,我们可以使用它来运行您的代码并查看错误,这将更容易提供帮助。

以上是关于如何在熊猫中将 N/A (NaT) 转换为 0的主要内容,如果未能解决你的问题,请参考以下文章

如何在熊猫数据框中将单元格设置为 NaN

如何在熊猫中将索引转换为日期时间?

如何在熊猫中将列转换为一个日期时间列?

如何在熊猫中将日历年转换为水年

如何在熊猫中将月度数据转换为季度

如何在熊猫中将字符串日期转换为数字[重复]