7

我查看了这个问题的答案: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')

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

4

1 回答 1

3

你应该更新你的熊猫,我推荐最新的稳定版本以获得最新的功能和错误修复。

此特定功能是在 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"])
于 2013-07-05T17:02:07.800 回答