当日期和时间在单独的列中时,将数据从csv读入pandas

sea*_*erd 7 python csv datetime pandas

我查看了这个问题的答案:在Python中使用pandas时,YYYYMMDD和HH在单独的列中解析日期,但它似乎对我不起作用,这让我觉得我做了一些微妙的错误.

我有.csv文件中的数据,我正在尝试使用pandas read_csv函数读取.日期和时间分为两列,但我想将它们合并到一个包含datetime对象的列"Datetime"中.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...
    ...
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用以下代码行阅读它:

   read_csv("2069_ALL_YEAR=2008.csv", skiprows=2, parse_dates={"Datetime" : [1,2]}, date_parser=True, na_values=["-99.9"])
Run Code Online (Sandbox Code Playgroud)

但是,当我把它写回到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')
Run Code Online (Sandbox Code Playgroud)

这些都没有造成一点点差别,这使我怀疑存在一些更深层次的问题.任何洞察它可能是什么?

And*_*den 4

您应该更新您的 pandas,我推荐最新的稳定版本以获取最新功能和错误修复。

这个特定功能是在 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
Run Code Online (Sandbox Code Playgroud)

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

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

In [11]: read_csv("2069_ALL_YEAR=2008.csv", skiprows=2, parse_dates={"Datetime" : [1,2]}, index_col=0, na_values=["-99.9"])
Run Code Online (Sandbox Code Playgroud)