簡體   English   中英

pd.Timedelta在數據幀列上的轉換

[英]pd.Timedelta conversion on a dataframe column

我正在嘗試將數據幀列轉換為timedelta但是遇到了問題。 列進入的格式類似於“+ XX:XX:XX”或“-XX:XX:XX”

我的數據幀:

    df = pd.DataFrame({'time':['+06:00:00', '-04:00:00'],})

我的方法:

    df['time'] = pd.Timedelta(df['time'])

但是,我收到錯誤:

    ValueError: Value must be Timedelta, string, integer, float, timedelta or convertible

當我做一個更簡單的例子:

    time = pd.Timedelta('+06:00:00')

我得到了我想要的輸出:

    Timedelta('0 days 06:00:00')

如果我想將一個系列轉換為具有所需輸出的timedelta,那會是什么方法?

我強烈建議使用專門設計和矢量化(即非常快)的方法: to_timedelta()

In [40]: pd.to_timedelta(df['time'])
Out[40]:
0            06:00:00
1   -1 days +20:00:00
Name: time, dtype: timedelta64[ns]

針對200K行DF的時序

In [41]: df = pd.concat([df] * 10**5, ignore_index=True)

In [42]: df.shape
Out[42]: (200000, 1)

In [43]: %timeit pd.to_timedelta(df['time'])
1 loop, best of 3: 891 ms per loop

In [44]: %timeit df['time'].apply(pd.Timedelta)
1 loop, best of 3: 7.15 s per loop

In [45]: %timeit [pd.Timedelta(x) for x in df['time']]
1 loop, best of 3: 5.52 s per loop

錯誤很明顯:

ValueError:Value必須是Timedelta,string,integer,float,timedelta或convertible

你傳遞給pd.Timedelta()是以上數據類型:

>>> type(df['time'])
<class 'pandas.core.series.Series'>

可能是你想要的:

>>> [pd.Timedelta(x) for x in df['time']]
[Timedelta('0 days 06:00:00'), Timedelta('-1 days +20:00:00')]

要么:

>>> df['time'].apply(pd.Timedelta)
0            06:00:00
1   -1 days +20:00:00
Name: time, dtype: timedelta64[ns]

查看文檔中的更多示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM