Python3 Pandas专栏在几秒钟内完成

时间:2015-02-18 13:07:29

标签: python datetime csv python-3.x pandas

我有这个.csv文件包含看起来像这样的数据

"Time","CH-1[V]","CH-2[V]","CH-3[V]",
 0.000000000E+00,-4.07000E-01, 3.01000E-01,-4.40000E-01,
 1.000000000E+01,-4.11000E-01, 3.01000E-01,-4.29000E-01,
 2.000000000E+01,-3.99000E-01, 3.01000E-01,-4.15000E-01,
 3.000000000E+01,-3.87000E-01, 3.01000E-01,-4.09000E-01,
 4.000000000E+01,-3.79000E-01, 3.00000E-01,-4.15000E-01,

"时间"列以秒为单位。该文件还包含格式为14-10-25 16:07:40的触发时间,它是时间的起点。

我想将第一列更改为Time*TriggerTime

我到目前为止所有的功能都是将triggertime转换为datetime和

parse = lambda x: dt.datetime.strptime(x, '%S')
content2 = pd.read_csv(current_file, parse_dates=['Time'], index_col=0, date_parser=parse)

但我似乎遇到了错误:

ValueError: time data ' 0.000000000E+00' does not match format '%S'

我无法解决。

有任何帮助吗? :)

1 个答案:

答案 0 :(得分:1)

In [9]: df = pd.read_csv(StringIO(data), index_col=0)

In [10]: df
Out[10]:
      CH-1[V]  CH-2[V]  CH-3[V]  Unnamed: 4
Time
0      -0.407    0.301   -0.440         NaN
10     -0.411    0.301   -0.429         NaN
20     -0.399    0.301   -0.415         NaN
30     -0.387    0.301   -0.409         NaN
40     -0.379    0.300   -0.415         NaN

将以秒为单位的列转换为Timedelta,然后将其添加到Timestamp

In [13]: pd.to_timedelta(df.index,unit='s') + pd.Timestamp('20141015 16:07:40')
Out[13]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-10-15 16:07:40, ..., 2014-10-15 16:08:20]
Length: 5, Freq: None, Timezone: None


In [14]: (pd.to_timedelta(df.index,unit='s') + pd.Timestamp('20141015 16:07:40')).tolist()
Out[14]:
[Timestamp('2014-10-15 16:07:40'),
 Timestamp('2014-10-15 16:07:50'),
 Timestamp('2014-10-15 16:08:00'),
 Timestamp('2014-10-15 16:08:10'),
 Timestamp('2014-10-15 16:08:20')]