2015-10-27 2 views
0

Я создал фрейм данных, а затем использовал pivot_table для переноса данных из строк в столбцы.Python Pandas - Fillna (method = ffill) приводит к NameError

In [3]: df = pd.read_csv('Transform.csv') 
In [7]: pivot = pd.pivot_table(df, values='Value', index="Structure", columns='Type') 
ranges = pivot.filter(items=['Min','Mid','Max']) 
print(ranges) 

Type  Min Mid Max 
Structure 
AE_BA10  456 543 756 
AE_BA12  0 0 0 
AE_BA14  0 0 0 
AE_BA16  0 0 0 

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

In [6]: ranges.stack() 
Out[6]: Structure Type 
     AE_BA10 Min 456 
        Mid 543 
        Max 756 
     AE_BA12 Min 0 
        Mid 0 
        Max 0 
     AE_BA14 Min 0 
        Mid 0 
        Max 0 
     AE_BA16 Min 0 
        Mid 0 
        Max 0 

Я пытаюсь получить данные в столбце «Структура», чтобы повторить заголовки строк так выглядеть следующим образом:

Structure Type  
AE_BA10  Min 456 
AE_BA10  Mid 543 
AE_BA10  Max 756 
AE_BA12  Min 0 
AE_BA12  Mid 0 
AE_BA12  Max 0 
AE_BA14  Min 0 
AE_BA14  Mid 0 
AE_BA14  Max 0 
AE_BA16  Min 0 
AE_BA16  Mid 0 
AE_BA16  Max 0 

Я попытался с помощью fillna (метод = ffill) но я получаю с ним имяError.

In [8]: ranges.fillna(method=ffill) 

NameError Traceback (most recent call last) in() ----> 1 ranges.fillna(method=ffill) 

NameError: name 'ffill' is not defined 

Может кто-нибудь, пожалуйста, дайте мне знать, что я делаю неправильно?

EDIT: Я помещаю ffill в кавычки, но он все еще не заполняет структуру до конца.

In [19]: stacked.fillna(method='ffill') 
Out[19]: 
Structure Type 
AE_BA10 Min  456 
      Mid  543 
      Max  756 
AE_BA12 Min  0 
      Mid  0 
      Max  0 
AE_BA14 Min  0 
      Mid  0 
      Max  0 
AE_BA16 Min  0 
      Mid  0 
      Max  0 
dtype: float64 

Окончательный вариант: решение Ако работало.

In [37]: ranges.stack().reset_index(level=0) 

     Structure 0 
Type   
Min AE_BA10  456 
Mid AE_BA10  543 
Max AE_BA10  756 
Min AE_BA12  0 
Mid AE_BA12  0 
Max AE_BA12  0 
+0

вам нужно поставить ffill в кавычки - вы передаете его как имя, поэтому python считает ссылку на объект. – ako

+0

Спасибо, я попробовал поместить его в кавычки, но он до сих пор не заполняет «Структура» до конца. – Tony

ответ

1

NameError является хорошим показателем - вам нужно поставить ffill в кавычках - вы передаете его как имя, так питон думает, что это ссылка на объект.

(Вы также можете посмотреть на метод pd.melt() для реструктуризации данных.)

Edit 1:

В дополнение к NameError, вы столкнулись с нулями. Попробуйте разложить свои данные, поэтому max - это столбец, а не часть MultiIndex, и используйте ffill на этом фрейме.

У меня нет данных, но что-то вроде:

stacked.stack(level=1).fillna(method='ffill') 

Если сделать трюк.

Edit 2:

OP действительно прошу о получении индекса повторить для всех строк, которые не являются fillna() вопроса. Чтобы это понять, это будет делать:

ranges.stack().reset_index(level=0) 
+0

На самом деле это похоже на то, что ваша структура данных 'range' из ранее имеет эту структуру. Попробуйте 'range.fillna (method = 'ffill')' – ako

+0

Спасибо за то, что посмотрели на это @ako, но он все еще не работает. range.fillna (method = 'ffill') возвращает его к оригиналу. stacked.stack (level1) .fillna (method = 'ffill') дает мне ошибку атрибута. Я рассмотрю pd.melt(). – Tony

+0

ОК. Попробуйте предоставить данные для воспроизводимого [пример] (http://stackoverflow.com/help/mcve) – ako

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