Панда разбор номера недели - PullRequest
0 голосов
/ 05 октября 2019

Рассмотрим следующий файл test.csv:

"Time","RegionCode","RegionName","NumValue"
"2009-W40","AT","Austria",0
"2009-W40","BE","Belgium",54
"2009-W40","BG","Bulgaria",0
"2009-W40","CZ","Czech Republic",1

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

parser = lambda x: pd.datetime.strptime(x, "%Y-W%W")
df = pd.read_csv("test.csv", parse_dates=["Time"], date_parser=parser)

Результат:

    Time    RegionCode  RegionName  NumValue
0   2009-01-01  AT  Austria 0
1   2009-01-01  BE  Belgium 54
2   2009-01-01  BG  Bulgaria    0
3   2009-01-01  CZ  Czech Republic  1

Однако полученный столбец времени неверен. Все, что я получаю, это "2019-01-01", и это, конечно, не 40-я неделя года. Я делаю что-то неправильно? У кого-нибудь еще была эта проблема при разборе недель?

Ответы [ 2 ]

2 голосов
/ 05 октября 2019

Вы почти правы. Единственная проблема заключается в том, что по номеру недели и году вы не можете определить конкретную дату. Хитрость заключается в том, чтобы просто добавить день недели как 1.

Я бы порекомендовал придерживаться pd.to_datetime(), как вы пытались изначально, и указать строку формата даты . Это должно хорошо работать с добавленной 1:

pd.to_datetime(df['Time'] + '-1', format='%Y-W%W-%w')
# 0   2009-10-05
# 1   2009-10-05
# 2   2009-10-05
# 3   2009-10-05
1 голос
/ 05 октября 2019

Я не уверен, что вы можете разобрать его непосредственно на read_csv, но вы можете сделать это после:

import pandas as pd

test = [
["2009-W40","AT","Austria",0],
["2009-W40","BE","Belgium",54],
["2009-W40","BG","Bulgaria",0],
["2009-W40","CZ","Czech Republic",1]]

df = pd.DataFrame(test,columns=["Time","RegionCode","RegionName","NumValue"])

df["Time"] = pd.to_datetime(df["Time"].str[:4],format="%Y") + \
             pd.to_timedelta(df["Time"].str[-2:].astype(int).mul(7),unit="days")

print (df)

#
        Time RegionCode      RegionName  NumValue
0 2009-10-08         AT         Austria         0
1 2009-10-08         BE         Belgium        54
2 2009-10-08         BG        Bulgaria         0
3 2009-10-08         CZ  Czech Republic         1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...