我有一个文本文件,其中包含像'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中指定转换或者(可能更好,所以我有两个)通过附加一个新列,但我没有看到怎么做它。我很确定这只是我的密集。
任何人都可以提供帮助我解开的小费吗?
答案 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