我正在为输出准备一个pandas df,并希望删除表中的NaN和NaT,并将这些表位置留空.一个例子是
mydataframesample
col1 col2 timestamp
a b 2014-08-14
c NaN NaT
Run Code Online (Sandbox Code Playgroud)
会成为
col1 col2 timestamp
a b 2014-08-14
c
Run Code Online (Sandbox Code Playgroud)
大多数值都是dtypes对象,timestamp列是datetime64 [ns].为了解决这个问题,我尝试使用熊猫mydataframesample.fillna(' ')
来有效地在该位置留出空间.但是,这不适用于日期时间类型.为了解决这个问题,我试图将timestamp列转换回对象或字符串类型.
是否可以在不进行类型转换的情况下移除NaN/NaT?如果没有,我如何进行类型转换(尝试str()和astype(str)但是datetime是原始格式的困难)?
Ale*_*ane 14
我有同样的问题:这使用pandas apply函数完成所有操作.应该是最快的方法.
import pandas as pd
df['timestamp'] = df['timestamp'].apply(lambda x: x.strftime('%Y-%m-%d')if not pd.isnull(x) else '')
Run Code Online (Sandbox Code Playgroud)
如果您的时间戳字段尚未datetime
格式化,则:
import pandas as pd
df['timestamp'] = pd.to_datetime(df['timestamp']).apply(lambda x: x.strftime('%Y-%m-%d')if not pd.isnull(x) else '')
Run Code Online (Sandbox Code Playgroud)
unu*_*tbu 11
这不会赢得任何速度奖励,但如果DataFrame不太长,使用列表理解进行重新分配将完成工作:
df1['date'] = [d.strftime('%Y-%m-%d') if not pd.isnull(d) else '' for d in df1['date']]
Run Code Online (Sandbox Code Playgroud)
import numpy as np
import pandas as pd
Timestamp = pd.Timestamp
nan = np.nan
NaT = pd.NaT
df1 = pd.DataFrame({
'col1': list('ac'),
'col2': ['b', nan],
'date': (Timestamp('2014-08-14'), NaT)
})
df1['col2'] = df1['col2'].fillna('')
df1['date'] = [d.strftime('%Y-%m-%d') if not pd.isnull(d) else '' for d in df1['date']]
print(df1)
Run Code Online (Sandbox Code Playgroud)
产量
col1 col2 date
0 a b 2014-08-14
1 c
Run Code Online (Sandbox Code Playgroud)