做的时候:
import pandas x = pandas.read_csv('data.csv', parse_dates=True, index_col='DateTime', names=['DateTime', 'X'], header=None, sep=';')
用这个data.csv
文件:
1449054136.83;15.31 1449054137.43;16.19 1449054138.04;19.22 1449054138.65;15.12 1449054139.25;13.12
(第一列是UNIX时间戳,即自1970年1月1日起经过的秒数),每15秒重新采样数据时出现此错误x.resample('15S')
:
TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex
这就像尚未解析的"日期时间"信息:
X DateTime 1.449054e+09 15.31 1.449054e+09 16.19 ...
如何使用pandas模块导入日期存储为时间戳的.CSV?
然后,一旦我能够导入CSV,如何访问日期> 2015-12-02 12:02:18的行?
我的解决方案与Mike的相似:
import pandas import datetime def dateparse (time_in_secs): return datetime.datetime.fromtimestamp(float(time_in_secs)) x = pandas.read_csv('data.csv',delimiter=';', parse_dates=True,date_parser=dateparse, index_col='DateTime', names=['DateTime', 'X'], header=None) out = x.truncate(before=datetime.datetime(2015,12,2,12,2,18))
使用to_datetime
和传递unit='s'
将单位解析为unix时间戳,这将更快:
In [7]: pd.to_datetime(df.index, unit='s') Out[7]: DatetimeIndex(['2015-12-02 11:02:16.830000', '2015-12-02 11:02:17.430000', '2015-12-02 11:02:18.040000', '2015-12-02 11:02:18.650000', '2015-12-02 11:02:19.250000'], dtype='datetime64[ns]', name=0, freq=None)
时间:
In [9]: import time %%timeit import time def date_parser(string_list): return [time.ctime(float(x)) for x in string_list] ? df = pd.read_csv(io.StringIO(t), parse_dates=[0], sep=';', date_parser=date_parser, index_col='DateTime', names=['DateTime', 'X'], header=None) 100 loops, best of 3: 4.07 ms per loop
和
In [12]: %%timeit t="""1449054136.83;15.31 1449054137.43;16.19 1449054138.04;19.22 1449054138.65;15.12 1449054139.25;13.12""" df = pd.read_csv(io.StringIO(t), header=None, sep=';', index_col=[0]) df.index = pd.to_datetime(df.index, unit='s') 100 loops, best of 3: 1.69 ms per loop
因此,to_datetime
在这个小数据集上使用速度提高了2倍以上,我希望它比其他方法更好地扩展