Pandas чтение csv с датой и периодом времени - PullRequest
0 голосов
/ 28 апреля 2020

В настоящее время у меня есть датафрейм, загруженный из csv как таковой:

   name                  week  content
0  Dan  2012-07-09/2012-07-15      4.0
1  Jim  2012-07-09/2012-07-15      1.0
2  Joe  2012-07-09/2012-07-15      3.0
3  Sam  2012-07-16/2012-07-22     18.0
4  Tom  2012-07-16/2012-07-22      7.0

Дата-время week сохраняется как string. Как бы я go о преобразовании этого в datetime period?

1 Ответ

3 голосов
/ 28 апреля 2020

Вы можете сначала преобразовать дату в to_datetime, а затем использовать Series.dt.to_period:

df['week'] = pd.to_datetime(df['week'].str.split('/').str[0]).dt.to_period('W')

print (df)
  name                   week  content
0  Dan  2012-07-09/2012-07-15      4.0
1  Jim  2012-07-09/2012-07-15      1.0
2  Joe  2012-07-09/2012-07-15      3.0
3  Sam  2012-07-16/2012-07-22     18.0
4  Tom  2012-07-16/2012-07-22      7.0

print (df['week'])
0    2012-07-09/2012-07-15
1    2012-07-09/2012-07-15
2    2012-07-09/2012-07-15
3    2012-07-16/2012-07-22
4    2012-07-16/2012-07-22
Name: week, dtype: period[W-SUN]

Если хотите разобрать значения в read_csv использование converters с функцией лямбды:

import pandas as pd
from io import StringIO

temp="""name;week;content
0;Dan;2012-07-09/2012-07-15;4.0
1;Jim;2012-07-09/2012-07-15;1.0
2;Joe;2012-07-09/2012-07-15;3.0
3;Sam;2012-07-16/2012-07-22;18.0
4;Tom;2012-07-16/2012-07-22;7.0"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'

f = lambda x: pd.to_datetime(x.split('/')[0]).to_period('W')
df = pd.read_csv(StringIO(temp), sep=";", converters={'week': f})

print (df)
  name                   week  content
0  Dan  2012-07-09/2012-07-15      4.0
1  Jim  2012-07-09/2012-07-15      1.0
2  Joe  2012-07-09/2012-07-15      3.0
3  Sam  2012-07-16/2012-07-22     18.0
4  Tom  2012-07-16/2012-07-22      7.0

print (df.dtypes)
name              object
week       period[W-SUN]
content          float64
dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...