我想将Pandas DataFrame的列从object
转换为数字(例如float64
)。 DataFrame如下:
import pandas as pd
import numpy as np
import datetime as dt
df = pd.read_csv('data.csv')
df
ID MIN
0 201167 32:59:00
1 203124 14:23
2 101179 8:37
3 200780 5:22
4 202699 NaN
5 203117 NaN
6 202331 36:05:00
7 2561 30:43:00
我想将MIN
列从object
类型转换为数字(例如float64
)。例如,32:59:00
应该变为32.983333
。
我不确定是否有必要作为初始步骤,但我可以通过以下方式将每个NaN
转换为0
:
df['MIN'] = np.where(pd.isnull(df['MIN']), '0', df['MIN'])
如何有效地转换整个列?我尝试过dt.datetime.strptime()
,df['MIN'].astype('datetime64')
和pd.to_datetime(df['MIN'])
的各种变体,但没有成功。
答案 0 :(得分:0)
定义转换器功能:
def str_to_number(time_str):
if not isinstance(time_str, str):
return 0
minutes, sec, *_ = [int(x) for x in time_str.split(':')]
return minutes + sec / 60
并将其应用于MIN
列:
df.MIN = df.MIN.map(str_to_number)
作品。
在:
ID MIN
0 1 32:59:00
1 2 NaN
2 3 14:23
后:
ID MIN
0 1 32.983333
1 2 0.000000
2 3 14.383333
以上是针对Python 3.这适用于Python 2:
def str_to_number(time_str):
if not isinstance(time_str, str):
return 0
entries = [int(x) for x in time_str.split(':')]
minutes = entries[0]
sec = entries[1]
return minutes + sec / 60.0
请注意60.0
。或者,使用from __future__ import print_function
来避免整数除法问题。