带有NA值的Pandas Dataframe抛出ValueError

时间:2015-07-21 15:54:01

标签: python pandas dataframe pivot-table na

我在pandas中有一个看起来像这样的数据框

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

我首先在某个日期范围内获取数据,然后尝试获取区域NA中的数据并且是MachineType Machine1。

但是,我一直收到此错误:ValueError: Length mismatch: Expected axis has 4 elements, new values have 3 elements

此代码一直有效,直到我添加了region列并使用了这一行:df = df[(df['Region']=='NA') & (df['CallType']=='Optia')]

因为首先将NA(NorthAmerica)的数据作为NaN读入,所以我在read_csv命令中使用了keep_default_na=False

但是,我这样做了一个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,而不是北美。

如何修复ValueError并避免NA混淆?

1 个答案:

答案 0 :(得分: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