2015-03-16 2 views
0

Я пытаюсь построить новый DataFrame из некоторых предыдущих кадров данных, которые я получил из CSV, и сделал некоторые вычисления с чем-то вродеСочетание двух частей Dataframes: «ValueError: длина массива 1 не соответствует длине индекса 586»

addtest = pd.DataFrame({'coordinates': 123456, 
         'level1': RainD.level, 
         'coordinates1': 789, 
         'level2':RainD2.level}) 

в приведенном выше примере, level1 и level2 просто импортированы уровни из CSV, без чего-либо к ним применяются, и я получаю новый dataframe без проблем, даже если уровни от 2-х разных файлов CSV имеют разные начала и даты окончания (что является преднамеренным).

Однако, если я пытаюсь «та же» в моем полном сценарии, он ошибка с

Traceback (most recent call last): 
    File "standardization_loop.py", line 365, in <module> 
    'SGW_month':Yearlist_sorted.level}) 
    File "/usr/lib64/python2.7/site-packages/pandas/core/frame.py", line 383, in __init__ 
    mgr = self._init_dict(data, index, columns, dtype=dtype) 
    File "/usr/lib64/python2.7/site-packages/pandas/core/frame.py", line 515, in _init_dict 
    dtype=dtype) 
    File "/usr/lib64/python2.7/site-packages/pandas/core/frame.py", line 5263, in _arrays_to_mgr 
    index = extract_index(arrays) 
    File "/usr/lib64/python2.7/site-packages/pandas/core/frame.py", line 5325, in extract_index 
    raise ValueError(msg) 
ValueError: array length 1 does not match index length 586 

Что эта ошибка хочет мне сказать?

Что я сделал, чтобы добраться:

Combined_df = pd.DataFrame({'Coordinates':Coordinates, 
       'SGW_year':RainD_SGW.level, 
       'SGW_month':Yearlist_sorted.level}) 

Редактировать (см комментарии тоже): Координаты просто цифры, однако если удалить эту часть, я все еще получаю ошибку, хотя это теперь изменен на AssertionError: Block shape incompatible with manager. Или я пропустил этот тип в первый раз? Но все же, согласно приведенным ниже тестам, два dataframe уровни должны соответствовать:

И чтобы убедиться, что они на самом деле соответствия и не имеют дубликаты, я также смотрел на RainD_SGW.level и Yearlist_sorted.level перед:

Yearlist_sorted.info() 
<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 586 entries, 1965-12-01 00:00:00 to 2014-09-01 00:00:00 
Data columns: 
level 586 non-null values 
dtypes: float64(1)None 
Yearlist_sorted.index.get_duplicates() 
<class 'pandas.tseries.index.DatetimeIndex'> 
Length: 0, Freq: None, Timezone: None 
RainD_SGW.info() 
<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 586 entries, 1965-12-01 00:00:00 to 2014-09-01 00:00:00 
Data columns: 
level 586 non-null values 
dtypes: float64(1)None 
RainD_SGW.index.get_duplicates() 
<class 'pandas.tseries.index.DatetimeIndex'> 
Length: 0, Freq: None, Timezone: None 

Выглядит хорошо? Кажется, что они имеют одинаковый размер в том же диапазоне дат, и они не страдают от дубликатов. Так что же еще?

+0

Можете ли вы дать нам некоторую информацию о переменной 'Координаты'? Похоже, что это может быть скаляр, а не массивная структура длины '586'. – cel

+0

«Координаты» - это всего лишь число (пока), как в моих испытаниях на ipython. Кроме того, если я удалю эту строку и просто сделаю 'Combined_df = pd.DataFrame ({'SGW_year': RainD_SGW.level, 'SGW_month': Yearlist_sorted.level})' Я все равно получаю ту же ошибку. –

+0

Cant редактирует предыдущий комментарий: его не та же ошибка, теперь это «ошибка утверждения». Я отредактировал его в вопросе. –

ответ

0

Не уверен, что если я могу рассчитывать это как ответ, но я нашел обходной путь (который, в свою очередь, дает мне еще больше, различные вопросы, в основном, если я на самом деле знаю, что, черт возьми, я делаю ...)

в любом случае, здесь идет:

RainD['SGW_month'] = Yearlist_sorted 
RainD['SGW_year'] = RainD_SGW 
RainD['Coordinates'] = str(Coordinates) 

Таким образом, вместо того, чтобы пытаться построить новый Dataframe, и указав, какие части моего вычисленного Dataframes я хочу, я просто добавить все это к моей первоначальной Dataframe (RainD), и кажется, что он достаточно умен, чтобы просто использовать уровни от этих DAtaframes.

Но это не кажется мне правильным. Я боюсь, что это не удастся, если у меня есть Dataframes с более чем одной ценностью, кроме их индекса.

Кроме того, я сказал значение Coordinates как строку. Я думал, что они уже были одним, но похоже, что я был неправ.

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