当日期和时间在不同的列中时,将数据从 csv 读取到 pandas

Posted

技术标签:

【中文标题】当日期和时间在不同的列中时,将数据从 csv 读取到 pandas【英文标题】:Reading data from csv into pandas when date and time are in separate columns 【发布时间】:2013-07-03 19:05:15 【问题描述】:

我看了这个问题的答案:Parse dates when YYYYMMDD and HH are in separate columns using pandas in Python,但它似乎对我不起作用,这让我觉得我做错了什么。

我有 .csv 文件中的数据,我正在尝试使用 pandas read_csv 函数读取这些数据。日期和时间位于两个单独的列中,但我想将它们合并为一列“日期时间”,其中包含日期时间对象。 csv 看起来像这样:

    Note about the data
    blank line
    Site Id,Date,Time,WTEQ.I-1...
    2069, 2008-01-19, 06:00, -99.9...
    2069, 2008-01-19, 07:00, -99.9...
    ...

我正在尝试使用这行代码来阅读它:

   read_csv("2069_ALL_YEAR=2008.csv", skiprows=2, parse_dates="Datetime" : [1,2], date_parser=True, na_values=["-99.9"])

但是,当我将其写回 csv 时,它看起来完全一样(除了 -99.9s 更改为 NA,就像我使用 na_values 参数指定的那样)。日期和时间位于两个单独的列中。据我了解,这应该是创建一个名为 Datetime 的新列,该列由第 1 列和第 2 列组成,使用 date_parser 进行解析。我也尝试过使用 parse_dates="Datetime" : ["Date","Time"], parse_dates=[[1,2]] 和 parse_dates=[["Date", "Time"]]。我也尝试过使用 date_parser=parse,其中 parse 定义为:

    parse = lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M')

这些都没有产生任何影响,这让我怀疑存在一些更深层次的问题。了解它可能是什么?

【问题讨论】:

您的示例数据对我有用。不过,我不得不取出 date_parser=True 位。 哎呀,现在我看看这个,我想你的方法应该也可以,你使用的是哪个 pandas 版本? 很高兴我并没有因为认为它看起来正确而疯狂:)。我在 Linux Mint 13 MATE 版本上使用 pandas 版本 0.7.0-1。 @dooz - 我试着把那部分拿出来,但它仍然不起作用......奇怪。它一定是我的设置所特有的。 最新稳定版是0.11,一定要更新! (我编辑了我的答案以反映这一点。) 【参考方案1】:

您应该更新您的 pandas,我推荐 latest stable version 以获取最新功能和错误修复。

此特定功能是 introduced in 0.8.0,适用于 pandas 0.11 版:

In [11]: read_csv("2069_ALL_YEAR=2008.csv", skiprows=2, parse_dates="Datetime" : [1,2], na_values=["-99.9"])
Out[11]:
             Datetime  Site Id  WTEQ.I-1
0 2008-01-19 06:00:00     2069       NaN
1 2008-01-19 07:00:00     2069       NaN

没有date_parser=True(因为这应该是一个解析函数,请参阅docstring)。

请注意,在提供的示例中,生成的“日期时间”列是其自身的系列,而不是 DataFrame 的索引值。 如果您希望将日期时间值作为索引列而不是整数值,请传递指定所需列的 index_col 参数,在本例中为 0,因为生成的“日期时间”列是第一个。

In [11]: read_csv("2069_ALL_YEAR=2008.csv", skiprows=2, parse_dates="Datetime" : [1,2], index_col=0, na_values=["-99.9"])

【讨论】:

以上是关于当日期和时间在不同的列中时,将数据从 csv 读取到 pandas的主要内容,如果未能解决你的问题,请参考以下文章

当训练数据位于多个不同长度时间序列的 csv 文件中时,如何提供 LSTM?

如何使用python从csv中的同一列拆分日期和时间?

如何在熊猫中使用 read_csv 将时区感知日期时间作为时区天真的本地 DatetimeIndex 读取?

从 csv.reader 之后的列(Python Pandas)中获取最早的日期

在同一个 CSV 文件中保存多个不同大小的列/变量

GCP将数据作为字符串从GCS中的CSV文件加载到BigQuery表中