【问题标题】:Specify format of date being read in by pandas指定 pandas 读取的日期格式
【发布时间】:2017-11-13 19:27:42
【问题描述】:

我正在使用 pandas 从 csv 文件中读取多组数据。有没有办法指定read_csv读入数据的日期格式?

例如,我有一个数据文件,其日期时间列的格式如下:

d/m/y h:mm

另一个格式如下:

yyyy-mm-dd HH:MM:ss

我想读入这些文件,然后匹配第二种日期格式。然后我可以使用 to_datetime 来确保列格式为日期时间格式并且可以用作熊猫索引。有没有办法使用 to_datetime 或 read_csv 指定传入格式或更改每个格式的传出格式?最终目标是连接这些不同的数据帧,以便日期时间索引合并。

【问题讨论】:

  • 提供date_parser 参数?
  • 您能详细说明 date_parser 参数吗?我不确定你的意思。
  • 我是说,只需使用to_datetime,它应该都能理解两者,但是,如果您提前知道格式,您应该在to_datetime 或当csv 为阅读,提供date_parser 参数。你检查过文件吗?这一切都在那里解释......
  • 我明白你在说什么。我对如何使用该论点不太清楚文档。我尝试使用“datefirst”参数,但我仍然不太清楚它是在读取还是将日期作为第一天。我的意思是我使用了“dayfirst”并被赋予了正确的顺序,但在输出中也是第一个定义的日期。你能给我一个简单的字符串,用于 date_parser 参数吗?
  • 也许最好将它们作为字符串加载,即不要在 pd.read_csv 上解析日期,然后只需使用 pd.to_datetime 并传递 format 参数

标签: python python-3.x pandas datetime


【解决方案1】:

我创建了一个名为:table.csv 的 csv 文件,以;分隔

date;numbers
1/1/19 9:9;1
25/12/18 11:11;2
;
date;numbers
2019-01-02 09:09:09;3
2018-12-26 11:11:11;4

希望这段代码可以帮助您了解date_parserformats 不同的日期:

import pandas as pd

fin = 'table.csv'

# NORMAL
dfA = pd.read_csv(fin, header=0, sep=';', nrows=2)
dfB = pd.read_csv(fin, header=4, sep=';', nrows=2)
dfN = pd.concat([dfA,dfB], ignore_index=True)

# PARSING DATE for each DataFrame with the
# date_parser
dfA = pd.read_csv(fin, header=0, sep=';', nrows=2, 
    parse_dates=['date'], 
    date_parser=lambda x: pd.datetime.strptime(x, '%d/%m/%y %H:%M'))

dfB = pd.read_csv(fin, header=4, sep=';', nrows=2, 
    parse_dates=['date'], 
    date_parser=lambda x: pd.datetime.strptime(x, '%Y-%m-%d %H:%M:%S'))

dfP = pd.concat([dfA,dfB], ignore_index=True)


print("normal", dfN['date'].dtype)
print("parser", dfP['date'].dtype)
print()
print(dfN)
print()
print(dfP)

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 2017-12-15
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    相关资源
    最近更新 更多