Если вы не можете использовать Python 2.6, вы можете использовать простое safeeval immenentation, например http://code.activestate.com/recipes/364469/
. Это контрейлеры на компиляторе Python, поэтому вам не нужно делать всю грубую работу самостоятельно.
Нет значения datetime dtype для read_csv, поскольку файлы csv могут содержать только строки, целые числа и поплавки.
Установка dtype в datetime будет сделать pandas интерпретировать datetime как объект, то есть вы получите строку.
Функция pandas.read_csv()
имеет аргумент ключевого слова, названный parse_dates
. Используя это, вы можете на лету преобразовывать строки, поплавки или целые числа в datetime, используя по умолчанию date_parser
(dateutil.parser.parser
)
headers = ['col1', 'col2', 'col3', 'col4']
dtypes = {'col1': 'str', 'col2': 'str', 'col3': 'str', 'col4': 'float'}
parse_dates = ['col1', 'col2']
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes, parse_dates=parse_dates)
Это заставит панды читать col1
и col2
как строки, которые они наиболее вероятно («2016-05-05» и т. Д.), И после чтения строки, date_parser для каждого столбца будет действовать на эту строку и возвратить все, что возвращает эта функция.
Функция pandas.read_csv()
также имеет аргумент ключевого слова с именем date_parser
Установка этой функции в lambda сделает эту конкретную функцию для анализа синтаксического анализа даты.
Вы должны дать ему функцию, а не выполнение функции, таким образом это Правильно
date_parser = pd.datetools.to_datetime
Это неверно :
date_parser = pd.datetools.to_datetime()
pd.datetools.to_datetime
перенесено на date_parser = pd.to_datetime
Спасибо @stackoverYC
Я попытался использовать параметр dtypes = [datetime, ...], но
import pandas as pd
from datetime import datetime
headers = ['col1', 'col2', 'col3', 'col4']
dtypes = [datetime, datetime, str, float]
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes)
Я обнаружил следующую ошибку:
TypeError: data type not understood
Единственное изменение, которое я имел сделать, чтобы заменить datetime на datetime.datetime
import pandas as pd
from datetime import datetime
headers = ['col1', 'col2', 'col3', 'col4']
dtypes = [datetime.datetime, datetime.datetime, str, float]
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes)
AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
– Gabriel
1 December 2016 в 10:29
Теперь есть параметр parse_dates, который вы можете передать read_csv, который позволяет вам указывать имена столбцов, которые вы хотите рассматривать как даты. Итак, лучший способ для OP:
dateCols = ['col1', 'col2']
pd.read_csv(file, sep='\t', header=None, names=headers, parse_dates=dateCols)
current read_csv documentation довольно забавно ...
Вы можете попробовать передать фактические типы вместо строк.
import pandas as pd
from datetime import datetime
headers = ['col1', 'col2', 'col3', 'col4']
dtypes = [datetime, datetime, str, float]
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes)
Но это будет очень сложно диагностировать, без каких-либо ваших данных, чтобы возиться с.
И действительно, вы, вероятно, хотите, чтобы панды анализировали даты на TimeStamps, так что это может быть:
pd.read_csv(file, sep='\t', header=None, names=headers, parse_dates=True)
converters
, в котором вы можете указать, в каких столбцах есть какие преобразователи. parse_dates полезен и обрабатывает плохие данные, но медленнее из-за его тестирования и выведения каждого значения gist.github.com/gjreda/7433f5f70299610d9b6b – Davos 5 April 2018 в 07:42