Столбец Python Pandas конвертирует минуты в секунды - PullRequest
0 голосов
/ 12 мая 2018

У меня есть панды, как показано ниже

    Runner  time
1   A      3.05.3   #( 3 minute 5 second and 3 millisecond)
2   B      2.50.2   #( 2minute 50 second and 2 millisecond)

На самом деле я хочу сравнить время, поэтому я хочу изменить время на единицу измерения или миллисекунду

как я могу сделать это в пандах? я думаю, я могу strptime?

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Вы можете использовать datetime.timedelta, чтобы выполнить этот расчет за вас. Для удобства вы можете обернуть это в функцию и применить через pd.Series.apply.

from datetime import timedelta

df = pd.DataFrame({'Runner': ['A', 'B'],
                   'time': ['3.05.3', '2.50.2']})

def seconder(x):
    mins, secs, millis = map(float, x.split('.'))
    td = timedelta(minutes=mins, seconds=secs, milliseconds=millis)
    return td.total_seconds()

df['seconds'] = df['time'].apply(seconder)

print(df)

  Runner    time  seconds
0      A  3.05.3  185.003
1      B  2.50.2  170.002
0 голосов
/ 12 мая 2018

Используйте для понимания списка секунд с преобразованием в int, если нет значений NaN s:

df['new'] = [int(a) * 60 + int(b) + int(c) / 1000 for a,b,c in df['col2'].str.split('.')]

Другим решением является split значений с expand=True для DataFrame и обработка:

df1 = df['col2'].str.split('.', expand=True).astype(int)
df['new'] = df1[0] * 60 + df1[1] + df1[2] / 1000

print (df)
  col1    col2      new
0    A  3.05.3  185.003
1    B  2.50.2  170.002

А для miliseconds кратно 1000:

df['new'] *= 1000
print (df)
  col1    col2       new
0    A  3.05.3  185003.0
1    B  2.50.2  170002.0
...