jbs*_*ssm 5 python pandas python-dateutil
我有几个CSV文件格式:
Year,Day,Hour,Min,Sec.,P1'S1
2003, 1, 0, 0,12.22, 0.541
2003, 1, 1, 0,20.69, 0.708
2003, 1, 2, 0, 4.95, 0.520
2003, 1, 3, 0,13.42, 0.539
...
Run Code Online (Sandbox Code Playgroud)
(当天,是一年中的某一天)我正在尝试使用熊猫图书馆阅读它们(到目前为止似乎是一个很棒的文章).
有一个内置函数可以在pandas中读取CSV,甚至更好的是,该函数可以检查列的日期类型.并自动将其用作索引(这对我正在做的事情来说非常完美).
问题是,我无法使用这种格式的日期数据.
我试过了:
data = pd.read_csv("csvFile.csv", index_col=[0, 1], , index_col=[0, 1, 2, 3, 4] parse_dates=True)
Run Code Online (Sandbox Code Playgroud)
但它只能正确地获得年份:
In [36]: data.index
Out[36]:
MultiIndex
[(<Timestamp: 2003-09-04 00:00:00>, 1, 0, 0, 12.22)
(<Timestamp: 2003-09-04 00:00:00>, 1, 1, 0, 20.69)
(<Timestamp: 2003-09-04 00:00:00>, 1, 2, 0, 4.95) ...,
(<Timestamp: 2003-09-04 00:00:00>, 365, 21, 0, 3.77)
(<Timestamp: 2003-09-04 00:00:00>, 365, 22, 0, 14.6)
(<Timestamp: 2003-09-04 00:00:00>, 365, 23, 0, 13.36)]
Run Code Online (Sandbox Code Playgroud)
从文档中,我看到您可以在pandas的read_csv函数中指定"date_parser"属性.但文档没有说明我是如何做到的,而且我无法弄明白.任何具有该主题经验的人都可以伸出援助之手.
干杯,布鲁诺
Cha*_*She 11
为了解析多列日期,你需要告诉pandas哪些列应该组合成一个日期,所以你需要说 parse_dates=['Year','Day','Hour','Min','Sec']
您还需要定义自己的解析器,该解析器从您指定的每个列中获取一个元素parse_dates:
In [1]: import pandas as pd
In [2]: from datetime import datetime, timedelta
In [3]: from cStringIO import StringIO
In [4]: data = """\
Year,Day,Hour,Min,Sec.,P1'S1
2003, 1, 0, 0,12.22, 0.541
2003, 1, 1, 0,20.69, 0.708
2003, 1, 2, 0, 4.95, 0.520
2003, 1, 3, 0,13.42, 0.539
"""
In [5]: def parse(yr, doy, hr, min, sec):
yr, doy, hr, min = [int(x) for x in [yr, doy, hr, min]]
sec = float(sec)
mu_sec = int((sec - int(sec)) * 1e6)
sec = int(sec)
dt = datetime(yr - 1, 12, 31)
delta = timedelta(days=doy, hours=hr, minutes=min, seconds=sec,
microseconds=mu_sec)
return dt + delta
...:
In [6]: pd.read_csv(StringIO(data), parse_dates={'datetime':
['Year','Day','Hour','Min','Sec.']},
date_parser=parse, index_col='datetime')
Out[6]:
P1'S1
datetime
2003-01-01 00:00:12.220000 0.541
2003-01-01 01:00:20.690000 0.708
2003-01-01 02:00:04.950000 0.520
2003-01-01 03:00:13.419999 0.539
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12246 次 |
| 最近记录: |