2015-05-22 2 views
2
1988 1 1 7.88 15.57 25.00 0.00 0.81 4.02 
    1988 1 2 6.50 10.37 24.87 0.00 0.49 4.30 
    1988 1 3 6.48 -8.79 21.28 0.00 0.62 3.91 

Я прочитал выше файл как:Создание индекса DATETIME в панд dataframe

df = pd.read_fwf('27_35.txt', header=None, widths=[6,4,4,6,6,6,6,6,6]) 

1-й столбец является год, второй столбец месяц и третий столбец день. Как мне создать индекс из этих 3 столбцов ('1988-1-1')?

ответ

5

Используйте parse_dates параметров и передать список в списке (так он понимает, что вы хотите, чтобы обработать список столбцов, как единое целое для синтаксического анализа):

In [83]: 
t="""1988 1 1 7.88 15.57 25.00 0.00 0.81 4.02 
    1988 1 2 6.50 10.37 24.87 0.00 0.49 4.30 
    1988 1 3 6.48 -8.79 21.28 0.00 0.62 3.91""" 
df = pd.read_fwf(io.StringIO(t), header=None, widths=[6,4,4,6,6,6,6,6,6], parse_dates=[[0,1,2]]) 
df 

Out[83]: 
     0_1_2  3  4  5 6  7  8 
0 1988-01-01 7.88 1 5.57 2 5.00 0 0.81 4.02 
1 1988-01-02 6.50 10.37 24.87 0 0.49 4.30 
2 1988-01-03 6.48 -8.79 21.28 0 0.62 3.91 

In [84]: 
df.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 3 entries, 0 to 2 
Data columns (total 7 columns): 
0_1_2 3 non-null datetime64[ns] 
3  3 non-null object 
4  3 non-null object 
5  3 non-null float64 
6  3 non-null float64 
7  3 non-null float64 
8  3 non-null float64 
dtypes: datetime64[ns](1), float64(4), object(2) 
memory usage: 192.0+ bytes 

EDIT

Для сохранить исходные столбцы даты добавить параметр keep_date_col=True

df = pd.read_fwf('27_35.txt', header=None, widths=[6,4,4,6,6,6,6,6,6], parse_dates=[[0,1,2]], keep_date_col=True) 
+0

thanks @EdChum, есть способ сохранить исходные 3 столбца как Что ж? – user308827

+1

Добавить параметр 'keep_date_col = True' – EdChum

1

Я всегда fogetting, как иметь дело с датами в панд .... Вы можете попробовать это:

df.index = df.apply(lambda row: datetime.datetime(int(row[0]), int(row[1]), int(row[2])),1) 
1

Я хотел бы сделать это:

import pandas as pd 
df = pd.DataFrame(data={'Year':[1988, 1988, 1988], 'Month':[1, 1, 1], 
         'Day': [1, 2, 3]}) 

date = [str(y)+'-'+str(m)+'-'+str(d) for y, m, d in zip(df.Year, df.Month, df.Day)] 
df.index = pd.to_datetime(date) 

>>> print df 
      Day Month Year 
1988-01-01 1  1 1988 
1988-01-02 2  1 1988 
1988-01-03 3  1 1988 

После этого вы можете оставить день , Месяц и год из вашего фрейма.

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