我在pandas数据框中有如下列:
0 2018-04-06
1 2018-04-06
2 2018-04-09
3 2018-04-19
4 2018-04-19
5 2018-04-17
我想将此列转换为yyyy / mm / dd,我已按照以下方式将其转换为:
def change_date_format(x):
if x != 'nan' and x != '' and x != ' ' and x != 0:
x = parse(x, dayfirst=True).strftime("%Y-%m-%d")
return x
else:
return ''
read4['Column Name'] = read4['Column Name'].apply(lambda x : change_date_format(x) )
但它转换如下:
2018-06-04
2018-06-04
2018-09-04
2018-04-19
2018-04-19
2018-04-17
理想情况下应该是:
2018-04-06
2018-04-06
2018-04-09
2018-04-19
2018-04-19
2018-04-17
如何强制它按上述方式工作。基本上它也应该考虑输入,并取决于它应该工作。
答案 0 :(得分:2)
我认为需要to_datetime
参数errors='coerce'
才能将非可解析值转换为NaT
,然后strftime
和最后replace
:
read4['Column Name'] = (pd.to_datetime(read4['Column Name'], errors='coerce')
.dt.strftime("%Y-%m-%d")
.replace('NaT', ''))
Column Name
0 2018-04-06
1 2018-04-06
2 2018-04-09
3 2018-04-19
4 2018-04-19
5 2018-04-17
答案 1 :(得分:1)
也许您需要将dayfirst
标记设置为False
?
x = parse(x, dayfirst=False).strftime("%Y-%m-%d")