2013-04-23 7 views
1

Я столкнулся с проблемой, когда pandas.to_csv отбрасывает значения в столбцах типа datetime64.Pandas to_csv падает значения

In [24]: df 
Out[24]: 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 28982 entries, 0 to 28981 
Data columns (total 4 columns): 
value 28982 non-null values 
date1 28982 non-null values 
date2 22772 non-null values 
date3 28982 non-null values 
dtypes: datetime64[ns](3), float64(1) 

In [25]: df.tail() 
Out[25]: 
     value    date1    date2    date3 
28977 25.44 2002-08-21 00:00:00 2013-05-03 00:00:00 2007-09-01 00:00:00 
28978 25.86 2002-08-21 00:00:00 2013-05-03 00:00:00 2007-09-01 00:00:00 
28979 26.08 2002-08-21 00:00:00 2013-05-03 00:00:00 2007-09-01 00:00:00 
28980 25.84 2002-08-21 00:00:00 2013-05-03 00:00:00 2007-09-01 00:00:00 
28981 25.35 2002-08-21 00:00:00 2013-05-03 00:00:00 2007-09-01 00:00:00 

In [26]: df.to_csv('test.csv', index = False) 

In [27]: df2 = pd.read_csv('test.csv', header = 0) 

In [28]: df2 
Out[28]: 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 28982 entries, 0 to 28981 
Data columns (total 4 columns): 
value 28982 non-null values 
date1 28982 non-null values 
date2 21070 non-null values 
date3 17036 non-null values 
dtypes: float64(1), object(3) 

In [29]: df2.tail() 
Out[29]: 
     value    date1 date2 date3 
28977 25.44 2002-08-21 00:00:00 NaN NaN 
28978 25.86 2002-08-21 00:00:00 NaN NaN 
28979 26.08 2002-08-21 00:00:00 NaN NaN 
28980 25.84 2002-08-21 00:00:00 NaN NaN 
28981 25.35 2002-08-21 00:00:00 NaN NaN 

Как показано на рисунке, я написал ФР в файл и сразу прочитать его обратно в df2, столбцы date2 и date3 в файле CSV есть много недостающих значений к низу. Это ошибка? Кстати, я использую Pandas 0.11.

+0

Это не происходит в моем компьютере, может предоставить файл пример CSV? – waitingkuo

+0

По иронии судьбы to_csv сбрасывает значения при сохранении в csv. Таким образом, в файле примера уже будут отсутствовать значения. – ezbentley

+0

Как насчет сбрасывания его на маринование? – waitingkuo

ответ

2

это известная проблема: https://github.com/pydata/pandas/issues/3062

обходной путь, в основном это:

for c in datetime_columns_that_have_NaT: 

    df[c] = df[c].astype('object') 

df.to_csv() 

, когда вы читаете его обратно, если вы specifiy parse_dates = [that_column_num]

он будет работать

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

dfc = pd.read_csv('test.csv',index_col=0).convert_objects(convert_dates='coerce') 

вынудит Преобразование даты

+0

извините, но я думаю, что моя проблема отличается от проблемы, о которой вы говорите. Моя проблема заключается в том, что to_csv не записывает значения в файл csv. Если я открою файл csv с помощью текстового редактора, значения будут отсутствовать. Ваша проблема относится к read_csv, не анализируя столбцы с NaN/NaT, но моя проблема - to_csv не записывать значения. – ezbentley

+0

ok .... это ошибка, я могу рассказать вам, как ее исправить (изменение в 1 строку), если вы хотите отредактировать код, это влияет только на то, что у вас есть большой фрейм. – Jeff

+0

попробуйте это исправить (вы можно просто изменить код в строке, если хотите): https://github.com/pydata/pandas/pull/3438 – Jeff

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