我看了这个问题的答案:Parse dates when YYYYMMDD and HH are in separate columns using pandas in Python,但它似乎对我不起作用,这让我觉得我做了一些微妙的错误。
我有.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...
...
我试图用这行代码读取它:
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" :["日期","时间"]},parse_dates = [[1,2]]和parse_dates = [["日期","时间"]]。我也尝试使用date_parser = parse,其中parse定义为:
parse = lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M')
这些都没有造成一点点差别,这让我怀疑还有一些更深层次的问题。任何洞察它可能是什么?
答案 0 :(得分:3)
您应该更新您的熊猫,我建议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)。
请注意,在提供的示例中,生成的“Datetime”列是它自己的Series,而不是DataFrame的索引值。 如果您希望将datetime值作为索引列而不是整数值,则传递指定所需列的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"])