Разбор дат в пандах - PullRequest
0 голосов
/ 15 мая 2018

Так что мне нужно прочитать CSV-файл, который содержит дату и числовое значение в таком формате: 2017-01-01 00:00:00,-350.7866656.

Вот мой код:

def parser(x):                                                                                                         
    return datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
df = read_csv('filename', header=None, parse_dates=[0], index_col=0, 
squeeze=True, date_parser=parser)

print(df.head())

Я получаю сообщение об ошибке: ValueError: unconverted data remains: ,-350.7866656 Как я понимаю, программа обрабатывает строку как один столбец вместо двух и пытается проанализировать всю строку вместо первого столбца с датой. Как я могу это исправить, чтобы он читал CSV-файл в два столбца?

Ответы [ 2 ]

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

Я посмотрел документацию pandas.read_csv .Параметр index_col, который вы установили на 0, устанавливает столбец даты в файле в качестве индекса.По моему мнению, удаление параметра даст желаемый результат, то есть чтение CSV в двух столбцах.

Приветствия!

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

По моему мнению, проблема в том, что у вас могут быть неправильные значения даты, которые не могут быть проанализированы одним форматом datetime.Вместо этого добавьте оператор try-except к функции parser:

import pandas as pd
import numpy as np
from datetime import datetime, time

temp=u"""2015-01-04 12:04:10,10
2018-01-10 18:40:12,20
-350.7866656,20"""

def parser(x): 
    try:                                                                                                        
        return datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
    except ValueError:
        return np.nan

#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp),  header=None, parse_dates=[0], index_col=0, 
squeeze=True, date_parser=parser)

print (df)
0
2015-01-04 12:04:10    10
2018-01-10 18:40:12    20
NaT                    20
Name: 1, dtype: int64

print (df.index)
DatetimeIndex(['2015-01-04 12:04:10', '2018-01-10 18:40:12', 'NaT'], dtype='datetime64[ns]', name=0, freq=None)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...