当日期和时间在不同的列中时,将数据从 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?
如何在熊猫中使用 read_csv 将时区感知日期时间作为时区天真的本地 DatetimeIndex 读取?