我需要一个DateTimeIndex作为我的数据。问题是我的源文件。日期头是日期(dd-mm),但是实际的日期数据有dd:mm:yy (24:06:1970)等格式。我有很多源文件,所以手动更改标题将是乏味的,也不是很好的编程实践。如何从python内部解决这个问题呢?
或者创建一个源文件的副本,打开它,搜索日期头,更改它,然后关闭它?我对python并不熟悉,所以我不确定这是否是最好的方法,如果是的话,我如何实现这样的代码?
目前我有这个;
df = pd.read_csv('test.csv',
skiprows = 4,
parse_dates = {'stamp':[0,1]},
na_values = 'NaN',
index_col = 'stamp'
)其中,0列是有关的日期列,第1列是时间列。我没有收到任何错误信息,只是错误的数据。
对不起,我应该在问题中添加csv文件的片段,我现在已经在下面提供了它;
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发布于 2014-06-30 09:56:26
我认为主要的问题是头行Date(dd-mm-yy), Time(hh:mm:ss), Julian_Day似乎只指定了一些列名。Pandas无法推断如何处理其他数据。
尝试跳过文件的列名行,向pandas传递列names的列表,并定义自己的date_parser
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 StringIO、data = """...和StringIO(data)部件,这样我就可以以可运行的形式将数据直接包含在这个答案中。您只需要在您自己的代码中使用pd.read_csv(my_data_filename, ...
发布于 2014-07-01 09:41:06
你的约会真的很奇怪,你应该把它们都修好。如果您确实由于某些原因无法在磁盘上修复它们,我想您可以内联地这样做:
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。那么熊猫就可以正常地对待它们了。请记住,这些都将是在世界协调时。
https://stackoverflow.com/questions/24484774
复制相似问题