Hai*_*gSu 12 dataframe python-2.7 pandas
我一直在努力解决这个问题,我尝试了不同的方法.
我有一个简单的DataFrame,如图所示,
我可以使用代码替换NaN为None(Not String"None"),
[![dfTest2 = dfTest.where(pd.notnull(dfTest), None)][2]][2]
但是,NaT不会被替换None.
我一直在寻找答案,但没有运气.有人可以帮忙吗?
先感谢您.
piR*_*red 18
制作 dtype object
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
Run Code Online (Sandbox Code Playgroud)
dsh*_*man 13
我发现对我有用的最简单的解决方案是......
输入:
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)
Run Code Online (Sandbox Code Playgroud)
dfTest 的输出:
df.fillna(None)只适用于np.na但不适用pd.NaT。然而,doingdf.replace({np.nan: None})将pd.NaTandnp.na都替换为None。
# Initalize a sample dataframe
df = pd.DataFrame({
'start_date': pd.to_datetime(['2017-06-01', pd.NaT]),
'amount':[2997373, np.nan]
})
display(df)
# Then replace pd.NaT and np.na with None
df = df.replace({np.nan: None})
display(df)
Run Code Online (Sandbox Code Playgroud)
小智 5
首先将列类型设为str
dfTest2.InvoiceDate = dfTest2.InvoiceDate.astype(str)
Run Code Online (Sandbox Code Playgroud)
然后直接与“NaT”比较并替换为None
dfTest2.InvoiceDate = dfTest2.InvoiceDate.apply(lambda x : None if x=="NaT" else x)
Run Code Online (Sandbox Code Playgroud)