Pandas read_csv读取时间偏移字符串

时间:2014-11-19 09:43:56

标签: python pandas

我有一个文本文件,其中包含像'10:15.3'这样的列的数据,这意味着在一些规范事件发生后10分钟15.3秒。当我用read_csv读到这篇文章时,我得到了字符串:

>>> df.time.head()
0    08:32.0
1    08:38.0
2    08:39.0
3    08:43.0
4    09:15.0
Name: time, dtype: object
 >>> df.time.head()[:1][0]
'08:32.0'
>>> 

我觉得我应该能够在pandas中轻松获得秒数,或者通过在read_csv中指定转换或者(可能更好,所以我有两个)通过附加一个新列,但我没有看到怎么做它。我很确定这只是我的密集。

任何人都可以提供帮助我解开的小费吗?

4 个答案:

答案 0 :(得分:1)

您可以使用datetime.time对象。为此,您需要提供:小时,分钟,秒,微秒。它们以整数形式提供,因此您只需要将每个字符串的相关部分int转换为datetime.date构造函数。

所以在你的情况下:

import datetime 
df = pd.read_csv('your_csv.csv')
df.time = pd.Series([datetime.time(0, int(val[:2]), int(val[3:5]), int(val[6:])*100000)
                     for val in df.time], index = df.index)

答案 1 :(得分:1)

使用0.15,这很容易,完整的文档是here

您的格式不是常规的'格式,但可以轻松地使其成为一个,通过预先发布的' 00:'制作小时字段。

In [20]: pd.Timedelta('00:' + '10:15.3')
Out[20]: Timedelta('0 days 00:10:15.300000')

In [19]: s
Out[19]: 
0    08:32.0
1    08:38.0
2    08:39.0
3    08:43.0
4    09:15.0
Name: 1, dtype: object

将它解析为timedelta。

In [15]: res = pd.to_timedelta('00:' + s)

In [16]: res
Out[16]: 
0   00:08:32
1   00:08:38
2   00:08:39
3   00:08:43
4   00:09:15
Name: 1, dtype: timedelta64[ns]

这些是规范缩小格式的显示秒数(例如hh:mm:最低格式的ss)。

In [17]: res.dt.seconds
Out[17]: 
0    32
1    38
2    39
3    43
4    15
dtype: int64

如果您需要表示的总秒数,请执行此操作(这称为频率转换):

In [18]: res.astype('timedelta64[s]')
Out[18]: 
0    512
1    518
2    519
3    523
4    555
Name: 1, dtype: float64

答案 2 :(得分:0)

我无法真正帮助你解决大熊猫的内部问题,但有一种简单的pythonic方法可以获得数字格式的秒数:

timeStr = '08:32.0'
seconds = float(time.split(':')[1]) # Split splits the string at the ':' character making a list of strings. Taking the second item from the list and casting to float should get you what you want.

答案 3 :(得分:0)

Haven和大熊猫一起工作,但我会像这样提取秒数:

from time import strptime
print strptime('09:12.14','%I:%M.%S').tm_sec