首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫DateTimeIndex

熊猫DateTimeIndex
EN

Stack Overflow用户
提问于 2014-06-30 07:17:37
回答 2查看 742关注 0票数 1

我需要一个DateTimeIndex作为我的数据。问题是我的源文件。日期头是日期(dd-mm),但是实际的日期数据有dd:mm:yy (24:06:1970)等格式。我有很多源文件,所以手动更改标题将是乏味的,也不是很好的编程实践。如何从python内部解决这个问题呢?

或者创建一个源文件的副本,打开它,搜索日期头,更改它,然后关闭它?我对python并不熟悉,所以我不确定这是否是最好的方法,如果是的话,我如何实现这样的代码?

目前我有这个;

代码语言:javascript
复制
df = pd.read_csv('test.csv',
                    skiprows = 4,
                    parse_dates = {'stamp':[0,1]},
                    na_values = 'NaN',                    
                    index_col = 'stamp'
                 )

其中,0列是有关的日期列,第1列是时间列。我没有收到任何错误信息,只是错误的数据。

对不起,我应该在问题中添加csv文件的片段,我现在已经在下面提供了它;

代码语言:javascript
复制
some stuff I dont want 
some stuff I dont want 
some stuff I dont want 
some stuff I dont want 
Date(dd-mm-yy),Time(hh:mm:ss),Julian_Day
01:07:2013,05:40:41,182.236586,659,1638.400000
01:07:2013,05:44:03,182.238924,659,1638.400000
01:07:2013,05:47:48,182.241528,659,1638.400000
01:07:2013,05:52:21,182.244687,659,1638.400000
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-30 09:56:26

我认为主要的问题是头行Date(dd-mm-yy), Time(hh:mm:ss), Julian_Day似乎只指定了一些列名。Pandas无法推断如何处理其他数据。

尝试跳过文件的列名行,向pandas传递列names的列表,并定义自己的date_parser

代码语言:javascript
复制
def my_parser(date, time):
    import datetime
    DATE_FORMAT = '%d:%m:%Y'
    TIME_FORMAT = '%H:%M:%S'
    date = datetime.datetime.strptime(date, DATE_FORMAT)
    time_weird_date = datetime.datetime.strptime(time, TIME_FORMAT)
    return datetime.datetime.combine(date, time_weird_date.time())

import pandas as pd
from cStringIO import StringIO

data = """\
some stuff I dont want 
some stuff I dont want 
some stuff I dont want 
some stuff I dont want 
Date(dd-mm-yy),Time(hh:mm:ss),Julian_Day
01:07:2013,05:40:41,182.236586,659,1638.400000
01:07:2013,05:44:03,182.238924,659,1638.400000
01:07:2013,05:47:48,182.241528,659,1638.400000
01:07:2013,05:52:21,182.244687,659,1638.400000
"""  

pd.read_csv(StringIO(data), skiprows=5, index_col=0, 
            parse_dates={'datetime':['date', 'time']}, 
            names=['date','time', 'Julian_Day', 'col_2', 'col_3'],
            date_parser=my_parser)

这应该能给你你想要的。

正如您说的,您是python的新手,我应该添加from、cStringIO import StringIOdata = """...StringIO(data)部件,这样我就可以以可运行的形式将数据直接包含在这个答案中。您只需要在您自己的代码中使用pd.read_csv(my_data_filename, ...

票数 2
EN

Stack Overflow用户

发布于 2014-07-01 09:41:06

你的约会真的很奇怪,你应该把它们都修好。如果您确实由于某些原因无法在磁盘上修复它们,我想您可以内联地这样做:

代码语言:javascript
复制
import re
from StringIO import StringIO
s = open('test.csv').read()
def rep(m):
    return '%s-%s-%sT' % (m.group('YY'), m.group('mm'), m.group('dd'))
s = re.sub(r'^(?P<dd>\d\d):(?P<mm>\d\d):(?P<YY>\d{4}),', rep, s, flags=re.M)
df = pd.read_csv(StringIO(s), skiprows=5, index_col=0, 
                 names=['time', 'Julian_Day', 'col_2', 'col_3'])

这只需要一些奇怪的日期,如01:07:2013,05:40:41,并将其格式化为ISO样式,如2013-07-01T05:40:41。那么熊猫就可以正常地对待它们了。请记住,这些都将是在世界协调时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24484774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档