Конвертировать время в целом столбце в импорт с плавающей точкой из CSV, используя Panda - PullRequest
0 голосов
/ 31 августа 2018

В моем CSV-файле у меня есть столбец времени с тремя столбцами данных. Мне нужно преобразовать время в плавание с помощью панды. Но это дает мне ошибку, недопустимый литерал для int () с основанием 10: 'g' Можете ли вы предложить мне, чтобы решить эту ошибку? Мой код

def time_to_float(t):
    """ convert "hh:mm:ss" to float (0, 1) only of the correct format """
    if t == '-':
        return None
    a = [int(i) for i in t.split(":")]
    if len(a) == 3:
        return round((a[0] + a[1] / 60 + a[2] / 3600) / 24, 5)
    else:
        return t


def pick_column(data_, n, start=1):
    """ pick all the n'th column data starting from "start" """
    return [time_to_float(data_[i][n]) for i in range(start, len(data_))]

data = pd.read_csv('data4.csv')
data = [i for i in data]


Time = pick_column(data, 0)
g = pick_column(data, 1)
p = pick_column(data, 2)
c = pick_column(data, 3)
y = pick_column(data, 4)



print(Time)
print(g)
print(p)
print(c)
print(y)

мой набор данных

Time	   g	 p	  c	 y
0:06:15	141	NaN	NaN	141
0:08:00	NaN	10	NaN	117
0:09:00	NaN	15	NaN	103
0:09:25	95	NaN	NaN	95
0:09:30	NaN	NaN	50	93

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Я думаю, вам нужно это

это ваш образец времени

print(df['Time'])
1:06:15

Чтобы преобразовать это в секунды в день, вы можете сделать это

df['TimeFloat'] = (pd.DatetimeIndex(df['Time']).astype(np.int64)/10**9)%86400

Используется модуль взятия 86400, потому что за один день 86400 секунд Вы можете изменить значение модуля в соответствии с вашими конверсиями (секунды, минуты, миллисекунды) Также, если вам нужно преобразование в int, вы можете просто использовать // вместо /

Окончательный DF будет это

   Time  TimeFloat
1:06:15     3975.0
0 голосов
/ 31 августа 2018

Обычно вы делаете что-то вроде

t = df[df.columns[0]].astype('int64') / 1e9
print(t)

для преобразования всего первого столбца. Если в вашей таблице есть только строки, вам нужно сначала преобразовать в даты, например,

timecol = df.columns[0]
df[timecol] = pd.to_datetime(df[timecol])

, а затем запустите первый фрагмент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...