使用 raise ValueError python 允许两种日期时间格式
Allow two datetime format using raise ValueError python
我有两个具有两种不同格式的 csv 文件,它们是 '%m/%d/%Y %H:%M:%S'
和 '%d/%m/%Y %H:%M:%S'
。因此,我会得到这样的 ValueError :
ValueError: time data '14/12/2020 17:43:15' does not match format '%m/%d/%Y %H:%M:%S'
来自 file1.csv
的示例数据,其中月份在中间:
timestamp
15/12/2020 11:01:54
15/12/2020 11:02:54
15/12/2020 13:33:24
虽然file2.csv
,月份在前:
timestamp
12/15/2020 11:01:54
12/15/2020 11:02:54
12/15/2020 13:33:24
该列以字符串形式出现,然后我需要进行转换以仅提取出 date
。
这是代码:
responses_df['date_only'] = [datetime.strptime(val, format='%m/%d/%Y %H:%M:%S').date() for val in responses_df['timestamp']]
我的计划是将 format=
重定向到一个将克服 ValueError
的函数并将格式从 '%m/%d/%Y %H:%M:%S'
更改为 '%d/%m/%Y %H:%M:%S'
。
像这样..:[=25=]
responses_df['date_only'] = [datetime.strptime(val, format=get_format()).date() for val in responses_df['timestamp']]
def get_format():
if ValueError is raised, use '%d/%m/%Y %H:%M:%S'
else, use '%m/%d/%Y %H:%M:%S'
试试
s1 = pd.to_datetime(df['timestamp'],format='%m/%d/%Y %H:%M:%S', errors='coerce')
s2 = pd.to_datetime(df['timestamp'],format='%d/%m/%Y %H:%M:%S', errors='coerce')
然后
df['new']=s1.fillna(s2)
假设在加入单个 df
之前,两个文件作为两个不同的数据帧读入——对于第一个文件,传递 dayfirst=True
。对于第二个文件,不要。然后,使用 dt.strftime()
:
将两者转换为所需格式
df1['timestamp'] = pd.to_datetime(df1['timestamp'], dayfirst=True).dt.strftime('%d/%m/%Y %H:%M:%S')
df2['timestamp'] = pd.to_datetime(df2['timestamp']).dt.strftime('%d/%m/%Y %H:%M:%S')
df1, df2
Out[1]:
( timestamp
0 15/12/2020 11:01:54
1 15/12/2020 11:02:54
2 15/12/2020 13:33:24,
timestamp
0 15/12/2020 11:01:54
1 15/12/2020 11:02:54
2 15/12/2020 13:33:24)
我有两个具有两种不同格式的 csv 文件,它们是 '%m/%d/%Y %H:%M:%S'
和 '%d/%m/%Y %H:%M:%S'
。因此,我会得到这样的 ValueError :
ValueError: time data '14/12/2020 17:43:15' does not match format '%m/%d/%Y %H:%M:%S'
来自 file1.csv
的示例数据,其中月份在中间:
timestamp
15/12/2020 11:01:54
15/12/2020 11:02:54
15/12/2020 13:33:24
虽然file2.csv
,月份在前:
timestamp
12/15/2020 11:01:54
12/15/2020 11:02:54
12/15/2020 13:33:24
该列以字符串形式出现,然后我需要进行转换以仅提取出 date
。
这是代码:
responses_df['date_only'] = [datetime.strptime(val, format='%m/%d/%Y %H:%M:%S').date() for val in responses_df['timestamp']]
我的计划是将 format=
重定向到一个将克服 ValueError
的函数并将格式从 '%m/%d/%Y %H:%M:%S'
更改为 '%d/%m/%Y %H:%M:%S'
。
像这样..:[=25=]
responses_df['date_only'] = [datetime.strptime(val, format=get_format()).date() for val in responses_df['timestamp']]
def get_format():
if ValueError is raised, use '%d/%m/%Y %H:%M:%S'
else, use '%m/%d/%Y %H:%M:%S'
试试
s1 = pd.to_datetime(df['timestamp'],format='%m/%d/%Y %H:%M:%S', errors='coerce')
s2 = pd.to_datetime(df['timestamp'],format='%d/%m/%Y %H:%M:%S', errors='coerce')
然后
df['new']=s1.fillna(s2)
假设在加入单个 df
之前,两个文件作为两个不同的数据帧读入——对于第一个文件,传递 dayfirst=True
。对于第二个文件,不要。然后,使用 dt.strftime()
:
df1['timestamp'] = pd.to_datetime(df1['timestamp'], dayfirst=True).dt.strftime('%d/%m/%Y %H:%M:%S')
df2['timestamp'] = pd.to_datetime(df2['timestamp']).dt.strftime('%d/%m/%Y %H:%M:%S')
df1, df2
Out[1]:
( timestamp
0 15/12/2020 11:01:54
1 15/12/2020 11:02:54
2 15/12/2020 13:33:24,
timestamp
0 15/12/2020 11:01:54
1 15/12/2020 11:02:54
2 15/12/2020 13:33:24)