使用 np.where [duplicate]

问题描述 投票:0回答:2

我不想将导入的 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['日期'])

python pandas where-clause
2个回答
0
投票

您可以使用:

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

0
投票

如果有

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
© www.soinside.com 2019 - 2024. All rights reserved.