2015-07-17 24 views
6

Có thể chuyển đổi tần số được biểu thị bằng chuỗi như "30T" (30 phút) "2S" (2 giây) thành một thứ có thể so sánh với một timedelta không?Chuyển chuỗi pandas freq thành timedelta

Tôi đang tìm kiếm cơ chế nội bộ cho gấu trúc nếu có thể. Mã hóa tất cả các chuyển đổi chuỗi có thể sử dụng cơ chế như these sẽ không mạnh mẽ.

+0

Bạn có thể cho đầu vào của mình không? –

+0

có thể trùng lặp của [Cách tạo đối tượng timedelta từ một chuỗi đơn giản] (http://stackoverflow.com/questions/4628122/how-to-construct-a-timedelta-object-from-a-simple-string) – SiHa

+0

@ColonelBeauvel: đầu vào là các chuỗi như "30T" hoặc là hoặc được phục hồi từ thuộc tính 'freqstr' của một DateTimeIndex –

Trả lời

9

Trong nhiều trường hợp, bạn có thể sử dụng chức năng to_timedelta cho việc này. Nó sẽ chuyển đổi một chuỗi để một timedelta:

In [9]: pd.to_timedelta('30min') 
Out[9]: Timedelta('0 days 00:30:00') 

In [10]: pd.to_timedelta('2S') 
Out[10]: Timedelta('0 days 00:00:02') 

Tuy nhiên, có vẻ như pd.to_timedelta ('30T') không làm việc, nhưng điều này có lẽ có thể được coi là một tính năng còn thiếu.
Nhưng, đối với cái này nó không có tác dụng nếu bạn lần đầu tiên chuyển nó sang một đối tượng tần số và sau đó cung cấp cho nó để to_timedelta:

In [19]: from pandas.tseries.frequencies import to_offset 

In [20]: pd.to_timedelta(to_offset('30T')) 
Out[20]: Timedelta('0 days 00:30:00') 

Nếu bạn bắt đầu từ một freqstr từ một DatetimeIndex, cách tiếp cận thứ hai sẽ luôn luôn làm việc. Tuy nhiên, bạn cũng có thể sử dụng freq thay vì freqstr, trả về đối tượng tần số trực tiếp:

In [34]: dtidx = pd.date_range('2012-01-01', periods=5, freq='30min') 

In [35]: pd.to_timedelta(dtidx.freq) 
Out[35]: Timedelta('0 days 00:30:00') 
Các vấn đề liên quan