Получение pandas Настройка с правом расширения

Начиная с версии 0.13, можно добавить к фрейму данных, указав индексы в .loc или .ix, которые еще не находятся в кадре данных. См. Документацию .

Тогда я смущен, почему эта строка выходит из строя:

all_treatments.loc[originalN:newN,:]    = all_treatments.loc[0:newrowcount,:]

Это создает значение ValueError:

ValueError: could not broadcast input array from shape (12) into shape (0)

Здесь all_treatments.shape = (53, 12), originalN = 53, newN = 64, all_treatments.loc[originalN:newN,:].shape = (0,12), all_treatments.loc[0:newrowcount,:].shape = (12,12).

Каков правильный способ установки с расширением здесь?

Ответ 1

Вы можете установить только путем увеличения с помощью одной строки или столбца. Вы устанавливаете диапазон.

Операции .loc/.ix/[] могут выполнять увеличение при настройке несуществующей клавиши для этой оси.

Для вашего использования, что-то вроде этого должно работать, чтобы расширить фрейм данных с новыми пустыми строками:

df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
>>> df
    a   b
0   1   4
1   2   5
2   3   6

new_row_count = 2
for new_row, old_row in enumerate(range(new_row_count), start=len(df)):
    df.ix[new_row] = None

>>>df
    a   b
0   1   4
1   2   5
2   3   6
3   NaN NaN
4   NaN NaN

Если вы хотите скопировать данные из исходного фреймворка, я бы обычно просто конкатенацию.

df = pd.concat([df, df.iloc[:2, :]], ignore_index=True)