Mat*_*ijn 0 python csv timestamp date pandas
阅读 Parse日期,当YYYYMMDD和HH在Python中使用pandas 和 使用python pandas 在单独的列中解析CSV时,日期格式为Year,Day,Hour,Min,Sec
我仍然无法用年,月,日和小时的分隔列解析日期.我的数据看起来像这样(第0列是ID,第一个是年份,第二个是月份,第三个是日,第四个是小时,第五个是值)
50136 2011 1 1 21 9792
50136 2011 1 1 22 9794
50136 2011 1 1 23 9796
50136 2011 1 1 0 9798
50136 2011 1 1 1 9799
50136 2011 1 1 2 9802
Run Code Online (Sandbox Code Playgroud)
我试过以下:
df = pd.read_csv(file, parse_dates = {'date': [1, 2, 3, 4]}, , index_col='date')但是我得索引不是时间戳而是unicode(?)
In [17]: print df.head()
Out [17]:
0 5
date
2011 1 1 21 50136 9792
2011 1 1 22 50136 9794
2011 1 1 23 50136 9796
2011 1 1 0 50136 9798
2011 1 1 1 50136 9799
In [18]: print df.index
Out [18]:
Index([u'2011 1 1 21', u'2011 1 1 22', u'2011 1 1 23', u'2011 1 1 0', u'2011 1 1 1', u'2011 1 1 2'], dtype=object)
Run Code Online (Sandbox Code Playgroud)
我显然做错了什么,但我无法理解.任何建议都非常感谢.
Rut*_*ies 10
如果常规方法不起作用,您可以始终回避编写自己的解析器.创建一个接受列的函数,parse_dates然后返回一个datetime并添加该函数date_parser.
所以类似于:
df = pd.read_csv(file, header=None, index_col='datetime',
parse_dates={'datetime': [1,2,3,4]},
date_parser=lambda x: pd.datetime.strptime(x, '%Y %m %d %H'))
Run Code Online (Sandbox Code Playgroud)
返回:
0 5
datetime
2011-01-01 21:00:00 50136 9792
2011-01-01 22:00:00 50136 9794
2011-01-01 23:00:00 50136 9796
2011-01-01 00:00:00 50136 9798
2011-01-01 01:00:00 50136 9799
2011-01-01 02:00:00 50136 9802
Run Code Online (Sandbox Code Playgroud)
如果你把它写成普通函数而不是lambda,它可能会更清楚:
def dt_parse(date_string):
dt = pd.datetime.strptime(date_string, '%Y %m %d %H')
return dt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4286 次 |
| 最近记录: |