如何将 pandas 数据框列中的两种不同日期格式转换为相同格式?
How to convert two different date formats from a pandas dataframe column into same format?
我在 pandas 列中有两种不同的日期格式,例如 - DD-MM-YYYY
和 MM/DD/YYYY
,我想将它们转换成相同的格式。
我尝试使用代码 -
data['SALE DATE'] = pd.to_datetime(data['SALE DATE']).dt.strftime('%m/%d/%Y')
但这会将日期转换为
DD/MM/YYYY
和 MM/DD/YYYY
进入输出 - data['SALE DATE']
我想要一个 python 解决方案来解决这个问题。任何线索都会很有帮助。
最直观的解决方案是编写自定义转换函数,
有点像:
def myDateConv(tt):
sep = tt[2]
if sep == '-':
return pd.to_datetime(tt, format='%d-%m-%Y')
elif sep == '/':
return pd.to_datetime(tt, format='%m/%d/%Y')
else:
return tt
然后将其作为相关列的 转换器 传递:
df = pd.read_csv('Input.csv', converters={'Date': myDateConv})
我准备了一个CSV文件,用read_csv读取,没有任何
自定义转换器给出了原始内容和两列
对象类型:
Date Input format
0 03-05-2020 DD-MM-YYYY
1 05/07/2020 MM/DD/YYYY
但是用上面的转换器读取同一个文件给出了:
Date Input format
0 2020-05-03 DD-MM-YYYY
1 2020-05-07 MM/DD/YYYY
Date 列的 datetime64[ns] 类型和两个日期都来自
五月,如期而至。
或者如果你有来自其他来源的这个 DataFrame 并且你想要
转换此列,运行:
df.Date = df.Date.apply(myDateConv)
如果您使用的是pandas 1+版本,您可以使用以下解决方案:
pd.to_datetime(["11-08-2018", "05-03-2016", "08/30/2017", "09/21/2018"], infer_datetime_format=True, dayfirst=True).strftime("%m/%d/%Y")
结果如下:
Index(['08/11/2018', '03/05/2016', '08/30/2017', '09/21/2018'], dtype='object')
这里的重要参数是dayfirst=True。
您可以查看 pd.to_datetime 文档了解更多信息
我在 pandas 列中有两种不同的日期格式,例如 - DD-MM-YYYY
和 MM/DD/YYYY
,我想将它们转换成相同的格式。
我尝试使用代码 -
data['SALE DATE'] = pd.to_datetime(data['SALE DATE']).dt.strftime('%m/%d/%Y')
但这会将日期转换为
DD/MM/YYYY
和 MM/DD/YYYY
进入输出 - data['SALE DATE']
我想要一个 python 解决方案来解决这个问题。任何线索都会很有帮助。
最直观的解决方案是编写自定义转换函数, 有点像:
def myDateConv(tt):
sep = tt[2]
if sep == '-':
return pd.to_datetime(tt, format='%d-%m-%Y')
elif sep == '/':
return pd.to_datetime(tt, format='%m/%d/%Y')
else:
return tt
然后将其作为相关列的 转换器 传递:
df = pd.read_csv('Input.csv', converters={'Date': myDateConv})
我准备了一个CSV文件,用read_csv读取,没有任何 自定义转换器给出了原始内容和两列 对象类型:
Date Input format
0 03-05-2020 DD-MM-YYYY
1 05/07/2020 MM/DD/YYYY
但是用上面的转换器读取同一个文件给出了:
Date Input format
0 2020-05-03 DD-MM-YYYY
1 2020-05-07 MM/DD/YYYY
Date 列的 datetime64[ns] 类型和两个日期都来自 五月,如期而至。
或者如果你有来自其他来源的这个 DataFrame 并且你想要 转换此列,运行:
df.Date = df.Date.apply(myDateConv)
如果您使用的是pandas 1+版本,您可以使用以下解决方案:
pd.to_datetime(["11-08-2018", "05-03-2016", "08/30/2017", "09/21/2018"], infer_datetime_format=True, dayfirst=True).strftime("%m/%d/%Y")
结果如下:
Index(['08/11/2018', '03/05/2016', '08/30/2017', '09/21/2018'], dtype='object')
这里的重要参数是dayfirst=True。
您可以查看 pd.to_datetime 文档了解更多信息