python - 将 Python 数据框中的多列转换为 yyyy/mm/dd,同时使用 excel 数值和普通日期时间值

标签 python excel pandas

我需要能够从数据框中的 Excel 文件中选择几列以应用标准日期时间格式(yyyy/mm/dd)。数据(不幸的是)混合了 Excel 数字(例如 43799)和标准日期格式(例如 2019 年 11 月 30 日)。我正在使用 pandas 的 read_excel 方法,并且不希望使用其他打开文件的方法(例如 xldr 的打开工作簿内容)。

导入数据时数据的示例:

import xlrd
import pandas as pd
import numpy as np
from datetime import datetime as dt

data=[['test', 43799, '11/30/2019', '11/30/2019'], ['test 2', '11/30/2019', '11/30/2019', '11/30/2019'], ['test 3', 43799, '11/30/2019', 43799]]
df=pd.DataFrame(data, columns=['Name','Date_1', 'Date_2', 'Date_3'])
print(df)

那么,如介绍中所述,如何选择第 1-3 列(Date_1、Date_2、Date_3)并将相同的日期格式应用于所有列(YYYY-MM-DD)?任何帮助将不胜感激!

最佳答案

您将需要使用不同的格式多次解析该列。 combine_first将允许您选择正确匹配的日期。 Excel 日期是自 1900-01-01 以来的天数,因此我们需要先将其更改为整数。

for col in ['Date_1', 'Date_2', 'Date_3']:
    d1 = pd.to_datetime(df[col], format='%m/%d/%Y', errors='coerce')
    d2 = pd.to_datetime(pd.to_numeric(df[col], errors='coerce'),  unit='d', origin='1900-01-01')
    df[col] = d1.combine_first(d2)
     Name     Date_1     Date_2     Date_3
0    test 2019-12-02 2019-11-30 2019-11-30
1  test 2 2019-11-30 2019-11-30 2019-11-30
2  test 3 2019-12-02 2019-11-30 2019-12-02

关于python - 将 Python 数据框中的多列转换为 yyyy/mm/dd,同时使用 excel 数值和普通日期时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60533828/

相关文章:

python - 创建自定义休息驱动节点 Django-Viewflow

java - R - 错误 : IllegalArgumentException (Java): Your InputStream was neither an OLE2 stream, 也不是 OOXML 流

从 pandas 数据框中选择特征的 Python 类

excel - 匹配一个数字 >= A 列和 < B 列返回 C 列#

excel - 在 Excel 单元格中显示姓名不起作用

python - 用计数复制数据框中的每一行

python - 根据另一个 df 和 pandas 的条件在 df 中添加新行

python - 我们如何防止 FastAPI 中的 html 注入(inject)?

python - 在 Python for 循环中设置列表项

Python:循环优化