這個問題在這里已經有了答案: Pandas - 將 HH:MM:SS.F 字串轉換為秒 - 警告:HH 有時會超過 24 小時 (1 個答案) 11 小時前關閉。
Time volts
0 15:15:10.951 368
1 15:15:11.950 373
2 15:15:12.950 368
3 15:15:13.949 316
4 15:15:14.949 368
... ... ...
2141 15:50:54.087 337
2142 15:50:55.069 343
2143 15:50:56.085 344
2144 15:50:57.081 339
2145 15:50:58.090 347
def time_convert(x):
h,m,s = map(int,x.split(':'))
return int(h) * 3600 int(m) * 60 int(s)
我得到的輸出:
ValueError Traceback (most recent call last)
<ipython-input-17-68cf4416cc88> in <module>
----> 1 df['Time'] = df['Time'].apply(time_convert)
4 frames
<ipython-input-12-42bee45f8bd8> in time_convert(x)
1 def time_convert(x):
----> 2 h,m,s = map(int,x.split(':'))
3 return int(h) * 3600 int(m) * 60 int(s)
4
5
ValueError: invalid literal for int() with base 10: '10.951'
我期待它轉換為秒。我只找到 HH:MM:SS 格式到秒的解決方案,但我沒有發現任何關于 SS.SS 轉換的案例。
uj5u.com熱心網友回復:
我只能推測您的資料框中的內容。無論如何,迭代(即使是應用)行通常是一個壞主意(非常慢)。
但是,至于為什么它不起作用,它在于您的轉換功能
def time_convert(x):
h,m,s = map(int,x.split(':'))
return int(h) * 3600 int(m) * 60 int(s)
你在這里轉換int兩次!將 int 映射到x.split(':'). 然后,當轉換每個 h,m,s
所以,簡單地說
def time_convert(x):
h,m,s = x.split(':')
return int(h) * 3600 int(m) * 60 int(s)
做同樣的事情。而且還是不行。因為你不能將 s 轉換為 int,因為它不是一個
def time_convert(x):
h,m,s = x.split(':')
return int(h) * 3600 int(m) * 60 float(s)
照原樣,您的代碼有效。必須有更有效的方法,但它有效。
更高效的方式
df.Time.str[:2].astype(int)例如,是 df 的 2 個第一個字符的一系列 int 轉換。
df.Time.str[3:5].astype(int)同樣適用于第 4 個和第 5 個字符。
同樣地df.Time.str[6:].astype(float)
你可以對整個系列進行算術運算。3600*df.Time.str[:2].astype(int) 60*df.Time.str[3:5].astype(int) df.Time.str[6:].astype(float)您想要的一系列值也是如此
。
因此,您想要的最快版本
df['Time'] = 3600*df.Time.str[:2].astype(int) 60*df.Time.str[3:5].astype(int) df.Time.str[6:].astype(float)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/525435.html
標籤:Python熊猫数据框
