这个问题与线程有关 How to change the datetime format in pandas
那里提出的解决方案可以在一天内很好地工作,但是如果您在同一数据框中有不同的日期怎么办?
例如,我在datetime中的日期是
2016-01-26
2016-01-27
2016-01-28
2016-01-29
与两次使用同一日期的线程相同的代码:
import pandas as pd
df = pd.DataFrame({'DOB': {0: '26/1/2016', 1: '26/1/2016'}})
print (df)
DOB
0 26/1/2016
1 26/1/2016
df['DOB'] = pd.to_datetime(df.DOB)
print (df)
DOB
0 2016-01-26
1 2016-01-26
df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y')
print (df)
DOB DOB1
0 2016-01-26 01/26/2016
1 2016-01-26 01/26/2016
我也在datetime to string with series in python pandas
上找到了此代码df['DOB1'] = df['DOB'].apply(lambda x:x.strftime('%m/%d/%Y'))
还有一个:
df['DOB1'] = df['DOB'].map(lambda x:x.strftime('%m/%d/%Y'))
例如,在我的数据框DOB中,我有以下日期,并且希望它们采用其他格式。
我的日期格式为日期时间:
0 2016-01-26
1 2016-01-27
2 2016-01-28
3 2016-01-29
所需的输出:
01/26/2016
01/27/2016
01/28/2016
01/29/2016
我一直在使用与上面相同的代码,但是当我运行它们时(无论使用哪种代码),所有日期都会变成
01/26/2016
01/26/2016
01/26/2016
01/26/2016
似乎pandas取了第一个值并将其应用于数据帧的其余部分。如何让熊猫读取和转换日期不同?
谢谢!
答案 0 :(得分:0)
我运行您的代码,结果与您预期的一样。
import pandas as pd
df = pd.DataFrame({'DOB': {0: '26/1/2016', 1: '27/1/2016', 2: '28/1/2016'}})
df['DOB'] = pd.to_datetime(df.DOB)
df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y')
结果:
DOB DOB1
0 2016-01-26 01/26/2016
1 2016-01-27 01/27/2016
2 2016-01-28 01/28/2016
在不了解更多详细信息的情况下,建议您创建一个函数并将其应用于您的列。
convert_date = lambda i: i.strftime('%m/%d/%Y')
df['DOB'].apply(convert_date)
0 01/26/2016
1 01/27/2016
2 01/28/2016
答案 1 :(得分:0)
感谢您对此进行调查。我发现了自己的错误,这有点令人尴尬,但我的确想在此留下问题-还要向其他初学者展示可以在不首先发现错误的情况下出错的地方。我还要感谢提供答复的善良人员。
确实,我确实确实使用了上面的代码作为示例。但是在我的代码中,我忘了在strftime中包含%d。所以,当然,像这样的日期
2016-01-26
2016-01-27
2016-01-28
2016-01-29
将被转换为
2016\01
2016\01
2016\01
2016\01
但是,只有当N. Arunoprayoch回答时,我才看到它!!!我想知道我怎么能错过那个?
很抱歉,再次感谢您的帮助!