【问题标题】:Pandas Dataframe with NA values throwing ValueError带有 NA 值的 Pandas 数据框抛出 ValueError
【发布时间】: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


【解决方案1】:

您可以执行以下操作以仅替换一列中的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 2016-12-27
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 2021-02-06
    • 2017-11-25
    相关资源
    最近更新 更多