我不想将导入的 CSV 文件中的日期从 %d-%m-%y 反转为 %y-%m-%d。我喜欢做这样的事情:
df['date'] = np.where((df['date'], '%d-%m-%y'), df['date'].apply(lambda x: datetime.datetime.strptime( x, '%Y-%m-%d')), df['日期'])
您可以使用:
pd.read_csv('file.csv', parse_dates=['date'], dayfirst=True, dtype=str) \
.to_csv('norm.csv', date_format='%Y-%m-%d', index=False)
输入
file.csv
:
date,value
30-03-2023,10
输出
norm.csv
:
date,value
2023-03-30,10
如果有
DD-MM-YY
和 MM-DD-YY
格式并且需要日期时间使用:
df['date'] = pd.to_datetime(df['date'], format='%d-%m-%y', errors='coerce')
.fillna(pd.to_datetime(df['date'], format='%m-%d-%y', errors='coerce'))
警告:解析这种格式存在歧义,因为通常不可能测试日期时间是否像 13 那样低。
print (df)
date
0 10-02-23
1 05-02-23
2 25-03-22
3 12-31-23
#prefered dd-mm-yy format if ambiguity
df['date1'] = (pd.to_datetime(df['date'], format='%d-%m-%y', errors='coerce')
.fillna(pd.to_datetime(df['date'], format='%m-%d-%y', errors='coerce')))
#prefered mm-dd-yy format if ambiguity
df['date2'] = (pd.to_datetime(df['date'], format='%m-%d-%y', errors='coerce')
.fillna(pd.to_datetime(df['date'], format='%d-%m-%y', errors='coerce')))
print (df)
date date1 date2
0 10-02-23 2023-02-10 2023-10-02
1 05-02-23 2023-02-05 2023-05-02
2 25-03-22 2022-03-25 2022-03-25
3 12-31-23 2023-12-31 2023-12-31