У меня есть кадр данных из 13 столбцов и 55 000 строк, я пытаюсь преобразовать 5 из этих строк в дату и время, сейчас они возвращают тип «объект», и мне нужно преобразовать эти данные для машинного обучения, я знаю, что если я делаю

data['birth_date'] = pd.to_datetime(data[birth_date], errors ='coerce')

Он вернет столбец datetime, но я хочу сделать это и для 4 других столбцов, есть ли одна строка, которую я могу написать, чтобы вызвать их все? Я не думаю, что могу индексировать как

data[:,7:12]

Спасибо!

41
kwashington122 6 Янв 2017 в 23:54

5 ответов

Лучший ответ

Вы можете использовать apply для перебора каждого столбца, используя pd.to_datetime

data.iloc[:, 7:12] = data.iloc[:, 7:12].apply(pd.to_datetime, errors='coerce')
37
Ted Petrou 28 Дек 2017 в 17:43

Если производительность является проблемой, я бы посоветовал использовать следующую функцию для преобразования этих столбцов в date_time:

def lookup(s):
    """
    This is an extremely fast approach to datetime parsing.
    For large data, the same dates are often repeated. Rather than
    re-parse these, we store all unique dates, parse them, and
    use a lookup to convert all dates.
    """
    dates = {date:pd.to_datetime(date) for date in s.unique()}
    return s.apply(lambda v: dates[v])

to_datetime: 5799 ms
dateutil:    5162 ms
strptime:    1651 ms
manual:       242 ms
lookup:        32 ms

Источник: https://github.com/sanand0/benchmarks/tree/master/date-parse

11
SerialDev 6 Янв 2017 в 21:06

Сначала вам нужно извлечь все интересующие вас столбцы из data, затем вы можете использовать pandas applymap для применения to_datetime к каждому элементу в извлеченном фрейме, я предполагаю, что вы знаете индекс столбцы, которые вы хотите извлечь, В коде ниже извлекаются имена столбцов с третьего по шестнадцатый столбцы. Вы также можете определить список и добавить в него имена столбцов и использовать его на месте, вам также может понадобиться передать формат даты / времени записей DateTime.

import pandas as pd

cols_2_extract = data.columns[2:15]

data[cols_2_extract] = data[cols_2_extract].applymap(lambda x : pd.to_datetime(x, format = '%d %M %Y'))
1
sgDysregulation 29 Дек 2017 в 08:07

Если вы хотите конвертировать во время загрузки, вы можете сделать что-то вроде этого

date_columns = ['c1','c2', 'c3', 'c4', 'c5']
data = pd.read_csv('file_to_read.csv', parse_dates=date_columns)
2
smishra 23 Май 2018 в 17:16
my_df[['column1','column2']] =     
my_df[['column1','column2']].apply(pd.to_datetime, format='%Y-%m-%d %H:%M:%S.%f')

Примечание: конечно, формат может быть изменен по мере необходимости.

16
סטנלי גרונן 31 Янв 2018 в 12:57