2016-08-02 2 views
0

Я следующий CSV, сохраненный в test.txt:Как обнаружить 01-Jan-01 даты в панд из CSV

title, arbitrarydate, value 
hello, 01-Jan-01, 314159 

работает следующий код

dataframe = pd.read_csv('pandatestcsv.txt', parse_dates = True) 
print dataframe.dtypes 

дает этот выход

title   object 
arbitrarydate object 
value    int64 
dtype: object 

Почему pandas не обнаруживает, что randomdate является столбцом даты? Как я могу правильно разобрать это? Я хочу, чтобы он обнаружил, что randomdate является столбцом даты для меня, я не хочу заранее указывать, какие столбцы содержат даты.

+0

Можно ли сделать эту работу без указания, какие столбцы содержат даты заранее ? –

ответ

0

Для меня работает:

import pandas as pd 
import io 

temp=u"""title,arbitrarydate,value 
hello,01-Jan-01,314159""" 
#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), parse_dates=['arbitrarydate']) 
print (df) 
    title arbitrarydate value 
0 hello 2001-01-01 314159 

print (df.dtypes) 
title     object 
arbitrarydate datetime64[ns] 
value      int64 
dtype: object 

Другое решение добавить позицию столбца в качестве параметра parse_dates:

df = pd.read_csv(io.StringIO(temp), parse_dates=[1]) 
print (df) 
    title arbitrarydate value 
0 hello 2001-01-01 314159 

print (df.dtypes) 
title     object 
arbitrarydate datetime64[ns] 
value      int64 
dtype: object 

Docs.

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

import pandas as pd 
import io 

temp=u"""title,arbitrarydate,value 
hello,01-Jan-01,2000""" 
#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), parse_dates = [0,1,2]) 
print (df) 
    title arbitrarydate  value 
0 hello 2001-01-01 2000-01-01 

print (df.dtypes) 
title     object 
arbitrarydate datetime64[ns] 
value   datetime64[ns] 
dtype: object 
+0

Можно ли заставить это работать, не указав заранее, какие столбцы содержат даты? –

+1

Я думаю, что нет, 'parse_dates = True' используется, если нужно разобрать datetimeindex. – jezrael

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