我在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混淆?
答案 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