2015-07-21 8 views
0

У меня есть dataframe в панд, которая выглядит, как этотПанды Dataframe с NA ЗНАЧЕНИЯ метания ValueError

df.head(2) 
Out[25]: 
            CompanyName Region MachineType 
recvd_dttm              
2014-07-13 12:40:40  Company1 NA Machine1 
2014-07-13 15:31:39  Company2 NA Machine2 

Я первый принимает данные в определенном диапазоне дат, а затем пытается получить данные, которые в области НС и это MachineType Machine1.

Однако, я получаю эту ошибку: ValueError: Length mismatch: Expected axis has 4 elements, new values have 3 elements

Этот код работал, пока не добавлен столбец область и использовать эту строку: df = df[(df['Region']=='NA') & (df['CallType']=='Optia')]

Поскольку сначала данные для NA (Северная Америка) была читается в как NaN, я использовал keep_default_na=False в моей команде read_csv.

Однако, я сделал pivot_table этот путь

result = df.groupby([lambda idx: idx.month, 'CompanyName']).agg(len).reset_index() 
result.columns = ['Month', 'CompanyName', 'NumberCalls'] 

pivot_table = result.pivot(index='Month', columns='CompanyName', values='NumberCalls').fillna(0) 

И ошибка приходит вверх по линии result.columns, хотя я не удивлюсь, если возможно, fillna (0) команда шалят , так как были другие значения NA, которые на самом деле должны были быть NaN, а не NorthAmerica.

Как исправить ValueError и избежать путаницы NA?

+0

было бы лучше для вас, чтобы просто заменить все 'NaN' что-то вроде«Northam». Вы можете сделать это 'df = df.replace (np.NaN, 'NorthAm')' – Plug4

+0

@ Plug4 Да, это была бы хорошая тактика, однако есть некоторые фактические записи NaN, которые я хочу остаться NaN. Они находятся в другом столбце, но есть ли способ заменить NA на NorthAm только в столбце Region? – jenryb

+0

Да! См. Мой ответ ниже – Plug4

ответ

0

Вот что вы можете сделать, чтобы заменить NaN в один столбец только:

import pandas as pd 
import numpy as np 

df = pd.read_clipboard() 
print df 

# I created a test column 
      recvd_dttm CompanyName Region MachineType Test 
2014-07-13 12:40:40 Company1  NaN Machine1 NaN 
2014-07-13 15:31:39 Company2  NaN Machine2 NaN 

df['Region'] = df['Region'].replace(np.NaN, 'NorthAm') 
print df 

      recvd_dttm CompanyName Region MachineType Test 
2014-07-13 12:40:40 Company1 NorthAm Machine1 NaN 
2014-07-13 15:31:39 Company2 NorthAm Machine2 NaN 
Смежные вопросы