【问题标题】:python pandas parse_dates for multiple columns in csv filecsv文件中多列的python pandas parse_dates
【发布时间】:2021-09-23 06:04:31
【问题描述】:

我正在使用 Python pandas 来比较两个 csv 文件,但在具有 5 个日期列的 csv 文件中,我使用了 parse_date=['dateofbirth','lastupdates','dateofjoin','dateofresign,'endoftrade'] read_csv 方法,但它只解析 dateofbirth 而不是 csv 文件中的所有列。

代码:

csv_pandas=pd.read_csv("path of the csv file",parse_date=['dateofbirth','lastupdates','dateofjoin','dateofresign,'endoftrade'])
print(csv_pandas)

CSV 文件:

dateofbirth             lastupdates       dateofjoin          dateofresign 
05/06/2021 00:00:00PM 12/13/2021 12:00:00PM 12/13/2021 12:00:00PM 12/13/2021 12:00:00PM

column        non-null count   Dtype
------        -------------    ------
dateofbirth    non-null         object
dateofbirth    non-null         datetime64[ns]
dateofbirth    non-null         datetime64[ns]
dateofbirth    non-null         datetime64[ns]

我只能转换对象 Dtype 列,剩下的 datetime64[ns] 不解析

我大约有 160 个 csv 文件,每个 csv 文件都有不同的列名,请任何人建议

【问题讨论】:

  • 这能回答你的问题吗? Can I parse dates in different formats?
  • 问题是因为它缺少00PM 之间的空格。您必须修改输入文件或创建自定义解析器并设置 date_parser 参数。
  • @Alex。我认为答案不适合 OP 的情况。
  • @Corralien,也许吧。我无法重现他们的问题。唯一不为我解析的列是dateofbirth。我认为问题在于毫秒字段。
  • 我的代码中的 Alex 需要解析两个 csv 文件源和目标然后我需要比较,但它不适用于所有列

标签: python pandas csv


【解决方案1】:
  • 您有两种日期格式,需要不同的strptime() 格式说明。
  • 并非您尝试转换的所有列都存在于数据框中,因此测试该列是否存在于作为 **kwargs 传递给 @987654322 的 dict 理解中@
csv_pandas = csv_pandas.assign(
    **{
        c: pd.to_datetime(csv_pandas[c], format="%Y-%m-%d %H:%M:%S:%f", errors="ignore")
        for c in parse_date
        if c in csv_pandas.select_dtypes("object").columns
    }
).pipe(
    lambda d: d.assign(
        **{
            c: pd.to_datetime(d[c], format="%m/%d/%Y %H:%M:%S%p", errors="ignore")
            for c in parse_date
            if c in d.select_dtypes("object").columns
        }
    )
)

输出

csv_pandas.dtypes
dateofbirth     datetime64[ns]
lastupdates     datetime64[ns]
dateofjoin      datetime64[ns]
dateofresign    datetime64[ns]
dtype: object

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 2018-06-11
    • 2015-10-25
    • 2017-06-10
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多