【发布时间】:2015-10-11 04:43:19
【问题描述】:
我在 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
此代码一直有效,直到我添加了区域列并使用了这一行:df = df[(df['Region']=='NA') & (df['CallType']=='Optia')]
因为起初 NA(北美)的数据被读取为 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 值实际上应该是 @ 987654327@,不是北美。
如何修复 ValueError 并避免 NA 混淆?
【问题讨论】:
-
简单地将所有
NaN替换为“NorthAm”之类的内容会更好吗?你可以这样做df = df.replace(np.NaN, 'NorthAm') -
@Plug4 是的,这将是一个很好的策略,但是有一些实际的 NaN 条目我想保留为 NaN。不过它们位于不同的列中,那么有没有办法仅在 Region 列中将 NA 替换为 NorthAm?
-
是的!请参阅下面的答案
-
我认为,一旦您正确阅读,您无需担心“NA”。看看
result.columns的输出。错误消息只是告诉您result有 4 列,而您正尝试用 3 列替换。你只需要弄清楚为什么你会丢失一个你期望在那里的列。 -
@JohnE 你是对的!我所要做的就是将“区域”添加到我的 result.columns 列表中。被 NA 问题所困扰,并认为一定是这样。感谢您的帮助!
标签: python pandas dataframe pivot-table na