2016-12-15 9 views
4

у меня есть этот dataframe с такого рода формат датыПреобразовать общий формат даты в формате ISO даты неделю

  Date Week Number Influenza[it] Febbre[it] Rinorrea[it] 
0 2008-01-01    1   220   585   103 
1 2008-01-08    2   403   915   147 
2 2008-01-15    3   366   895   136 
3 2008-01-22    4   305   825   136 
4 2008-01-29    5   311   837   121 
... ... 

Я хотел бы преобразовать формат даты в формате даты недели ISO как этот dataframe (потому что мне нужно пересечь два кадра данных с одинаковыми датами, основанными на годах и неделях). Формат похож на «year-weeknumber ofheear».

0  2007-42 
1  2007-43 
2  2007-44 
3  2007-45 
4  2007-46 
... ... 

Так что я был в состоянии просто найти ISO недели первого dataframe таким образом:

wiki = pd.read_csv('file.csv', parse_dates=['Date']) 
for i,d in wiki.iterrows(): 
    print d.Date.isocalendar()[1] 

Выход:

1 
2 
3 
4 
... 

Но я не знаю, как сделать формат даты, такой как второй информационный кадр (в порядке «год-неделя»)

ответ

4

Вы можете использовать векторизованный подход instea д после операции считывания:

df['Date'] = pd.to_datetime(df['Date']).dt.strftime('%Y-%V') 
df['Date'] 
0 2008-01 
1 2008-02 
2 2008-03 
3 2008-04 
4 2008-05 
Name: Date, dtype: object 

Здесь %V это директива, соответствующая ИСО 8601 номер недели.


демо:

from io import StringIO 
data = StringIO(
''' 
Date  Week Number Influenza[it] Febbre[it] Rinorrea[it] 
2008-01-01    1   220   585   103 
2008-01-08    2   403   915   147 
2008-01-15    3   366   895   136 
2008-01-22    4   305   825   136 
2008-01-29    5   311   837   121 
''') 
df = pd.read_csv(data, sep='\s{2,}', parse_dates=['Date'], engine='python') 
df 

enter image description here

df['Date'].dtypes 
dtype('<M8[ns]') 

df['Date'].dt.strftime('%Y-%V') 
0 2008-01 
1 2008-02 
2 2008-03 
3 2008-04 
4 2008-05 
Name: Date, dtype: object 

редактировать: (хотя неэффективна, только для воспроизводимости целей)

L = ['{}-{}'.format(d.Date.isocalendar()[0], str(d.Date.isocalendar()[1]).zfill(2)) for i,d in wiki.iterrows()] 

Construct series:

>>> pd.Series(L) 
0 2008-01 
1 2008-02 
2 2008-03 
3 2008-04 
4 2008-05 
dtype: object 
+0

Привет, я пытался, но ничего не меняется, вывод выглядит следующим образом: 0 2008-01-01 00:00:00 –

+0

Хорошо! Что такое dtype 'wiki ['Date']'? Используются ли типы 'datetime64 [ns]'? –

+0

<класс 'pandas.core.series.Series'> –

0

time.strftime ('% Y-% W') может работать для вас. Он используется для форматирования времени.

импорт панды как PD pd.to_datatime (time.time()). STRFTIME ('% Y-% W') '1970-00' будет видно в выводе

+0

'% W': номер недели года (понедельник как первый день недели) в виде десятичного числа [00,53]. Все дни в новом году, предшествующем первому понедельнику, считаются на неделе 0. –

Смежные вопросы