sin*_*047 5 python date missing-data python-3.x pandas
我有几个日期列,我想将它们转换为月/日/年格式。假设 test 是日期列之一 - 下面的代码有效。
dfq['test1'] = dfq['test1'].apply(lambda x: x.strftime('%m/%d/%Y'))
Run Code Online (Sandbox Code Playgroud)
但是,当列中缺少作为 'NaT' 的值时,它会显示错误 ValueError: NaTType 不支持 strftime 。我创建了一个样本数据集,并有意将一个缺失值保留为 ' ' 。在这种情况下,它也会显示错误。
我想保留缺失值或 NaT 值,因此无法删除它们。还有其他办法吗?
另一个问题,如果我想同时转换我所有的日期列(比如 test1、test、test3), - 有没有办法在使用 lambda/strftime 时做到这一点?
您应该使用pd.Series.dt.strftime,它可以NaT优雅地处理:
import pandas as pd
s = pd.Series(['2018-01-01', 'hello'])
s = pd.to_datetime(s, errors='coerce')
# 0 2018-01-01
# 1 NaT
# dtype: datetime64[ns]
s = s.dt.strftime('%m/%d/%Y')
print(s)
# 0 01/01/2018
# 1 NaT
# dtype: object
Run Code Online (Sandbox Code Playgroud)
对于你的第二个问题,我不相信datetime转换str可以矢量化。您可以轻松地执行此操作:
for col in ['col1', 'col2', 'col3']:
df[col] = df[col].dt.strftime('%m/%d/%Y')
Run Code Online (Sandbox Code Playgroud)
或更好:
for col in df.select_dtypes(include=['datetime']):
df[col] = df[col].dt.strftime('%m/%d/%Y')
Run Code Online (Sandbox Code Playgroud)