2014-01-14 2 views
0

У меня есть файл csv, который я пытаюсь импортировать в pandas.Pandas и импорт csv в dataframe. Как лучше всего комбинировать поля даты даты anbd в одном

Есть две колонны входа. дата и час и первые два столбца.

E.g. 

date,hour,... 
10-1-2013,0, 
10-1-2013,0, 
10-1-2013,0, 
10-1-2013,1, 
10-1-2013,1, 

Как импортировать с помощью панд, чтобы этот час и дата были объединены или это лучше всего сделать после первоначального импорта?

ДФ = DataFrame.from_csv («bingads.csv», Сентябрь = «»)

Если я первоначальный импорт, как я объединить два в качестве даты, а затем удалить час?

Благодаря

ответ

3

Определите свой собственный date_parser:

In [291]: from dateutil.parser import parse 
In [292]: import datetime as dt 
In [293]: def date_parser(x): 
    .....:  date, hour = x.split(' ') 
    .....:  return parse(date) + dt.timedelta(0, 3600*int(hour)) 

In [298]: pd.read_csv('test.csv', parse_dates=[[0,1]], date_parser=date_parser) 
Out[298]: 
      date_hour a b c 
0 2013-10-01 00:00:00 1 1 1 
1 2013-10-01 00:00:00 2 2 2 
2 2013-10-01 00:00:00 3 3 3 
3 2013-10-01 01:00:00 4 4 4 
4 2013-10-01 01:00:00 5 5 5 
1

Посмотрите на parse_dates аргумент, который принимает pandas.read_csv. Вы можете сделать что-то вроде:

df = pandas.read_csv('some.csv', parse_dates=True) 
# in which case pandas will parse all columns where it finds dates 
df = pandas.read_csv('some.csv', parse_dates=[i,j,k]) 
# in which case pandas will parse the i, j and kth columns for dates 
+1

Это не будет работать, что будет производить только Задан для первой колонны, второй столбец будет читаться как межд, ваша вторая строка кода также не будет, потому что вы хотите объединить столбцы, которые должны быть одним столбцом datetime, все, что вы сделали, это предоставить список столбцов, которые нужно проанализировать, поэтому вам нужно передать список списков «[[i, j, k]] ', все же все это не имеет значения, так как встроенный синтаксический анализатор даты терпит неудачу, поэтому вам нужно использовать настраиваемый параметр date_parser, например, @ waitkuo или подход @ alko. – EdChum

1

Применение read_csv вместо read_clipboard обрабатывать ваши фактические данные:

>>> df = pd.read_clipboard(sep=',') 
>>> df['date'] = pd.to_datetime(df.date) + pd.to_timedelta(df.hour, unit='D')/24 
>>> del df['hour'] 
>>> df 
       date ... 
0 2013-10-01 00:00:00 NaN 
1 2013-10-01 00:00:00 NaN 
2 2013-10-01 00:00:00 NaN 
3 2013-10-01 01:00:00 NaN 
4 2013-10-01 01:00:00 NaN 

[5 rows x 2 columns] 
+0

print pd .__ version __ = 0.10.1 – Tampa

+0

df ['date'] = pd.to_datetime (df.date) + pd.to _timedelta (df.hour, unit = 'D')/24 AttributeError: объект 'module' не имеет атрибута 'to_timedelta' – Tampa

1

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

import pandas as pd 
from StringIO import StringIO 
import datetime as dt 

txt='''\ 
date,hour,A,B 
10-1-2013,0,1,6 
10-1-2013,0,2,7 
10-1-2013,0,3,8 
10-1-2013,1,4,9 
10-1-2013,1,5,10''' 

def date_parser(date, hour): 
    dates=[] 
    for ed, eh in zip(date, hour): 
     month, day, year=list(map(int, ed.split('-'))) 
     hour=int(eh) 
     dates.append(dt.datetime(year, month, day, hour)) 

    return dates  

p=pd.read_csv(StringIO(txt), usecols=[0,1], 
       parse_dates=[[0,1]], date_parser=date_parser, squeeze=True) 

print p 

Печать:

0 2013-10-01 00:00:00 
1 2013-10-01 00:00:00 
2 2013-10-01 00:00:00 
3 2013-10-01 01:00:00 
4 2013-10-01 01:00:00 
Name: date_hour, dtype: datetime64[ns] 
Смежные вопросы