Проблема с date_parser: TypeError: parse () принимает 1 позиционный аргумент, но было дано 2 - PullRequest
0 голосов
/ 27 мая 2020

У меня следующая ошибка:

TypeError: parse() takes 1 positional argument but 2 were given

Я пытался выполнить базовую c подготовку данных, где я хотел проанализировать информацию о дате и времени как индекс Panda DataFrame ( объединить столбцы «дата» и «время» в один столбец) . Это фрагмент кода:

from pandas import read_csv
from datetime import datetime
def parse(x):
    return datetime.strptime(x,'%d-%b-%y %H:%M:%S' )

dataset = read_csv("dataset.csv", header=0, parse_dates = [['date', 'time']],
                   index_col=0, date_parser= parse)

Вот как выглядят исходные дата и время:

date          time
25-Apr-17   19:19:40
25-Apr-17   19:19:40
25-Apr-17   19:19:45
25-Apr-17   19:19:45

Я нашел альтернативный способ использования:

dataset = read_csv("dataset.csv", header=0, parse_dates = {'datetime':[1,2]},
                   index_col=0, date_parser=lambda x: datetime.strptime(x,'%d-%b-%y %H:%M:%S' )

Но все та же проблема. TypeError: <lambda>() takes 1 positional argument but 2 were given

Мне было интересно, ребята, не могли бы вы мне помочь с этой проблемой?

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

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

Если вы хотите проанализировать временную метку вручную, вы должны использовать следующий пример:

def parse(x, y):
    return datetime.strptime(f"{x} {y}", "%d-%b-%y %H:%M:%S")

dataset = read_csv("dataset.csv", header=0, parse_dates = [["date", "time"]],
                   index_col=0, date_parser=parse)

dataset

                     Unnamed: 0
date_time                      
2017-04-25 19:19:40           0
2017-04-25 19:19:40           1
2017-04-25 19:19:40           2
0 голосов
/ 28 мая 2020

После пары следов и ошибок мне в конце концов удалось решить проблему. Я использовал pd.to_datetime вместо datetime.strptime.

from pandas import read_csv
from datetime import datetime
import pandas as pd
def parse(d, t):
    dt = d+ " " +t
    return pd.to_datetime(dt)

dataset = read_csv("dataset.csv", header=0, parse_dates={'datetime': ['date', 'time']},
                   index_col=0, date_parser= parse)

Вывод:

datetime
2017-04-25 19:19:40
2017-04-25 19:19:40
2017-04-25 19:19:45
2017-04-25 19:19:45

Я дважды проверил тип данных «дата» и «время», они были типа данных «объект». Я не уверен, что этот метод будет работать с другими типами данных, такими как строка, но он решает мою проблему.

Спасибо всем за участие.

...