【问题标题】:Pandas DataFrame Replace NaT with NonePandas DataFrame 将 NaT 替换为 None
【发布时间】:2017-08-06 16:39:04
【问题描述】:

这个问题我纠结了很久,尝试了不同的方法。

如图所示,我有一个简单的 DataFrame,

我可以使用代码将NaN 替换为None(不是字符串“None”),

[![dfTest2 = dfTest.where(pd.notnull(dfTest), None)][2]][2]

我支持NaT 也被归类为“空”,因为以下内容,

但是,NaT 不会被 None 替换。

我一直在寻找答案,但没有运气。有人可以帮忙吗?

提前谢谢你。

【问题讨论】:

  • df.fillna(None) 好运吗?
  • @Cleb,试过但没有用。例外为ValueError: must specify a fill method or value。似乎None 是一个值或方法。
  • @Cleb 嗨,Thx 供参考。请看下面的答案。
  • stackoverflow.com/a/42818550/8770481 这个救了我的命。对我来说效果很好

标签: python-2.7 pandas dataframe


【解决方案1】:

制作dtypeobject

dfTest2 = pd.DataFrame(dict(InvoiceDate=pd.to_datetime(['2017-06-01', pd.NaT])))

dfTest2.InvoiceDate.astype(object).where(dfTest2.InvoiceDate.notnull(), None)

0    2017-06-01 00:00:00
1                   None
Name: InvoiceDate, dtype: object

【讨论】:

  • 太棒了!!!非常感谢。完全有道理,Timestamp 类型为 Null 提供了默认的 NaT。再次感谢。
  • 我不想改变对象的类型,只想要日期时间格式,所以这个解决方案不适合我。
  • 您的代码只给了我受影响的列。但我希望这发生在 DF 本身中,并且原始列被这个新列替换为 None。该怎么做?
  • 将结果分配回数据框
【解决方案2】:

我发现对我有用的最简单的解决方案是......

输入:

import pandas as pd
import numpy as np
dfTest = pd.DataFrame(dict(InvoiceDate=pd.to_datetime(['2017-06-01', pd.NaT]), CorpId=[2997373, np.nan], TestName=[1,1]))
dfTest.replace({np.nan: None}, inplace = True)

dfTest 的输出:

【讨论】:

  • 请注意,pd.np 在 Pandas 1.x.x 中已被删除
  • 这也将列类型更改为对象
【解决方案3】:

先将列类型设为str

 dfTest2.InvoiceDate =  dfTest2.InvoiceDate.astype(str)

然后直接与“NaT”比较,替换为None

dfTest2.InvoiceDate = dfTest2.InvoiceDate.apply(lambda x : None if x=="NaT" else x)

【讨论】:

    【解决方案4】:

    @neerajYadav 建议的类似方法,但没有 apply

    dfTest2['InvoiceDate'] = (dfTest2['InvoiceDate']
                              .astype(str) # <- cast to string to simplify
                                           #    .replace() in newer versions
                              .replace({'NaT': None} # <- replace with None
                             )
    

    【讨论】:

      猜你喜欢
      • 2013-06-10
      • 2020-04-07
      • 1970-01-01
      • 2022-12-17
      • 2015-08-30
      • 1970-01-01
      • 2019-08-15
      • 2018-05-19
      相关资源
      最近更新 更多