如何将包含“ 4:20”之类的字符串的列中的数据转换为浮点数

时间:2019-01-02 20:45:24

标签: python python-3.x pandas type-conversion

在我的数据框中,有一列包含这样的值:

 PowerPlayTimeOnIce
       0:05
       0:05
       1:24
       3:29
       1:34
        0
       0:05
        0
        0

如何将它们转换为浮点数?

此方法无效:

df["powerPlayTimeOnIce"] = df["powerPlayTimeOnIce"].astype('float')

编辑:更新了数据示例以更好地解决问题

4 个答案:

答案 0 :(得分:3)

使用to_datetime

s=pd.to_datetime(df.PowerPlayTimeOnIce,format='%M:%S')
s.dt.minute*60+s.dt.second
Out[881]: 
0      5
1      5
2     84
3    209
4     94
5      5
Name: PowerPlayTimeOnIce, dtype: int64

更新

s=pd.to_datetime(df.PowerPlayTimeOnIce,format='%M:%S',errors='coerce')

(s.dt.minute*60+s.dt.second).fillna(0)
Out[886]: 
0      5.0
1      5.0
2     84.0
3    209.0
4     94.0
5      5.0
6      0.0
Name: PowerPlayTimeOnIce, dtype: float64

数据输入

  PowerPlayTimeOnIce
0               0:05
1               0:05
2               1:24
3               3:29
4               1:34
5               0:05
6                  0

答案 1 :(得分:2)

您可以执行以下操作:

import pandas as pd

data = ['0:05',
        '0:05',
        '1:24',
        '3:29',
        '1:34',
        '0:05']


def convert(s):
    minutes, seconds = map(int, s.split(":"))
    return 60 * minutes + seconds


df = pd.DataFrame(data=data, columns=['powerPlayTimeOnIce'])
print(df['powerPlayTimeOnIce'].apply(convert))

输出

0      5
1      5
2     84
3    209
4     94
5      5
Name: powerPlayTimeOnIce, dtype: int64

答案 2 :(得分:1)

如果您想要非常冗长的流程并且没有庞大的数据集。您可以这样做:

df[['min', 'sec']] = df['powerPlayTimeOnIce'].str.split(':', expand=True)

df[['min'] = df[['min'].astype('int')
df['sec'] = df['sec'].apply(lambda x: float('0.'+x), axis=1)

df['diff_in_seconds'] = df['min']/60 + df['sec']

因此,我将您的数据分为分钟和秒。从那里您可以转换为任何格式。

答案 3 :(得分:0)

您可以使用pd.to_timedelta + .total_seconds()访问器。首先,您需要正确设置字符串格式(HH:mm:ss),因为您无法指定格式。尽管可能与冰球时代无关,但这可以处理很多时间而没有太多问题。

import pandas as pd

s = df.PowerPlayTimeOnIce.replace(':', '', regex=True).str.zfill(6)
pd.to_timedelta(s.str[0:-4]+':'+s.str[-4:-2]+':'+s.str[-2::]).dt.total_seconds()

输出:

0          5.0
1          5.0
2         84.0
3        209.0
4         94.0
5          5.0
6          0.0
7     446161.0
8    4046161.0
Name: PowerPlayTimeOnIce, dtype: float64

输入数据

  PowerPlayTimeOnIce
0               0:05
1               0:05
2               1:24
3               3:29
4               1:34
5               0:05
6                  0
7          123:56:01
8         1123:56:01