2015-02-10 3 views
2

Я практиковал функцию MulitIndex в пандах, но она не работает так, как я ожидал. Я думаю, это потому, что моих фундаментальных знаний недостаточно.Как настроить тип данных в Pandas?

from StringIO import StringIO # io.StringIO on python 3.X 
import pandas as pd 

datacsv = StringIO("""\ 
date,id,a,b 
20150209,42366,7644,6366 
20150209,52219,2741,1796 
20150209,52831,163,145 
20150209,53209,1047,862 
20150209,53773,31343,22501 
20150209,58935,16621,14873 
20150209,65464,19838,12177 
20150209,65823,4903,2982 
20150209,68497,16564,12207 
20150209,79230,48714,37355 
20150208,42366,7644,6366 
20150208,52219,2741,1796 
20150208,52831,163,145 
20150208,53209,1047,862 
20150208,53773,31343,22501 
20150208,58935,16621,14873 
20150208,65464,19838,12177 
20150208,65823,4903,2982 
20150208,68497,16564,12207 
20150208,79230,48714,37355" 
""") 

df = pd.read_csv(datacsv) 
df = df.set_index(['date','id'] 

Текущей «датой» является дата и время ноты. Как передать тип «даты» в дату и время, например 2015-02-09?

+0

Эй. Хороший вопрос. Надеюсь, вы не против, но я добавил данные из вашей ссылки на вопрос. Причина в том, что связь умирает и перемещается. Поэтому наличие данных здесь гарантирует, что этот вопрос останется полезным для других в будущем. Кроме того, это служит хорошей демонстрацией для вас и других о том, как сделать простой и воспроизводимый пример для вопросов панд. –

+0

@PaulH Я не заметил, что вы добавили данные. И я переписал сообщение. Не могли бы вы помочь добавить еще раз, так как я понятия не имею, как использовать свой способ для выполнения данных. –

+0

просто посмотрите на историю изменений вопроса. Моя ревизия должна быть доступна там. –

ответ

3

Вы можете преобразовать серию (или столбец) в дату и время, используя pd.to_datetime и указав формат.

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

>>> s = pd.Series([20150207, 20150208, 20150209]) 
>>> pd.to_datetime(s, format="%Y%m%d") 
0 2015-02-07 
1 2015-02-08 
2 2015-02-09 
dtype: datetime64[ns] 

Так, чтобы изменить столбец даты, прежде чем установить индекс, вы могли бы написать:

df['date'] = pd.to_datetime(df['date'], format="%Y%m%d") 
0

Почему выполнить преобразование DATETIME после загрузки, когда вы можете просто передать имя столбца read_csv для паров parse_dates:

In [30]: 

df = pd.read_csv(io.StringIO(temp1), parse_dates=['date']) 
df.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 20 entries, 0 to 19 
Data columns (total 4 columns): 
date 20 non-null datetime64[ns] 
id  20 non-null int64 
a  20 non-null int64 
b  20 non-null int64 
dtypes: datetime64[ns](1), int64(3) 

Кроме того, вы можете указать, какой столбец следует рассматривать как показатель, так что вы можете выполнить преобразование типа DateTime и установите индекс в PARAMS для read_csv, просто установите parse_dates и index_col:

In [34]: 

df = pd.read_csv(io.StringIO(temp1), parse_dates=['date'], index_col=['date']) 
type(df.index) 
Out[34]: 
pandas.tseries.index.DatetimeIndex 
Смежные вопросы