【问题标题】:cannot copy sequence with size 2 to array axis with dimension 1771077无法将大小为 2 的序列复制到维度为 1771077 的数组轴
【发布时间】:2017-10-13 20:35:27
【问题描述】:

我有一个名为“combi”的数据框(大小:(1771077, 38))。 当我尝试运行以下代码时:

dum = ['Date_ID', 'Distribution_Type','Fixed_CostFactor','Product_Description','Order_ID','Quantity','Amount','SalesMgr_Name', 'Sales_Type', 'Product_Description','Product_Category', 'Product_Group', 'Brand', Unit_of_Measure', 'Pack_Type','Cost_Price', 'Sales_Price', PlantName','City_Name','Population', 'Customer_Name', 'Customer_Since',     'Industry', 'Customer_Group','Month_Name', 'Quarter_No']

dummies = pd.get_dummies(combi[dum])

它给出了这个错误:

ValueErrorTraceback (most recent call last)
<ipython-input-19-1227d2ff4df6> in <module>()
      4        'Industry', 'Customer_Group','Month_Name', 'Quarter_No']
      5 
----> 6 dummies = pd.get_dummies(combi[dum])
      7 dummies.columns

/usr/lib64/python2.7/site-packages/pandas/core/reshape/reshape.pyc in get_dummies(data, prefix, prefix_sep, dummy_na, columns, sparse, drop_first)
   1206             dummy = _get_dummies_1d(data[col], prefix=pre, prefix_sep=sep,
   1207                                     dummy_na=dummy_na, sparse=sparse,
-> 1208                                     drop_first=drop_first)
   1209             with_dummies.append(dummy)
   1210         result = concat(with_dummies, axis=1)

/usr/lib64/python2.7/site-packages/pandas/core/reshape/reshape.pyc in _get_dummies_1d(data, prefix, prefix_sep, dummy_na, sparse, drop_first)
   1218                     sparse=False, drop_first=False):
   1219     # Series avoids inconsistent NaN handling
-> 1220     codes, levels = _factorize_from_iterable(Series(data))
   1221 
   1222     def get_empty_Frame(data, sparse):

/usr/lib64/python2.7/site-packages/pandas/core/series.pyc in __init__(self, data, index, dtype, name, copy, fastpath)
    246             else:
    247                 data = _sanitize_array(data, index, dtype, copy,
--> 248                                        raise_cast_failure=True)
    249 
    250                 data = SingleBlockManager(data, index, fastpath=True)

/usr/lib64/python2.7/site-packages/pandas/core/series.pyc in _sanitize_array(data, index, dtype, copy, raise_cast_failure)
   3027             raise Exception('Data must be 1-dimensional')
   3028         else:
-> 3029             subarr = _asarray_tuplesafe(data, dtype=dtype)
   3030 
   3031     # This is to prevent mixed-type Series getting all casted to

/usr/lib64/python2.7/site-packages/pandas/core/common.pyc in _asarray_tuplesafe(values, dtype)
    378             except ValueError:
    379                 # we have a list-of-list
--> 380                 result[:] = [tuple(x) for x in values]
    381 
    382     return result

ValueError: cannot copy sequence with size 2 to array axis with dimension 1771077

但是当我运行它时,它没有给出任何错误:

dummies = pd.get_dummies(combi)

谁能告诉我出了什么问题,我该如何解决?我希望只使用原始列的一个子集。

【问题讨论】:

    标签: python-3.x pandas dummy-variable valueerror


    【解决方案1】:

    我在尝试使用 get_dummies() 稀疏分类数据时也遇到了同样的错误,问题是当我删除它们时我有重复的列名,然后我没有再次收到此错误。

    希望对遇到同样问题的人有所帮助。

    【讨论】:

    • 同样的事情发生在我身上 :) 谢谢!
    【解决方案2】:

    在你的哑列表中,你似乎漏掉了几个单引号。例如,Unit_of_Measure 和 PlantName。你能修复它然后再试一次吗?

    dum=['Date_ID',
    'Distribution_Type',
    'Fixed_CostFactor',
    'Product_Description',
    'Order_ID',
    'Quantity',
    'Amount',
    'SalesMgr_Name',
    'Sales_Type',
    'Product_Description',
    'Product_Category',
    'Product_Group',
    'Brand',
    Unit_of_Measure',
    'Pack_Type',
    'Cost_Price',
    'Sales_Price',
    PlantName',
    'City_Name',
    'Population',
    'Customer_Name',
    'Customer_Since',
    'Industry',
    'Customer_Group',
    'Month_Name',
    'Quarter_No']
    

    可以使用下面的代码,您可以确定是哪一列导致了问题。

    for c in dum:
        print('column: {}, len: {}'.format(c, len(pd.get_dummies(df[c]))))
    

    【讨论】:

    • 嗨,艾伦,这很奇怪。在我的代码中没有这样的错误。我在这里复制并粘贴它,它显示缺少引号。无论如何,我在笔记本上检查了我的代码,所有引号都已到位。所以我猜这不是问题。
    • 它运行了前 2 列,然后我得到了这个 MemoryError。列:Date_ID,长度:1771077 列:Distribution_Type,长度:1771077 MemoryErrorTraceback(最近一次调用最后一次)
    • 您的机器似乎内存不足。这行得通吗? dummies = pd.get_dummies(combi, columns=dum)
    • 当我为整组列运行时,它工作正常。但是当我选择处理一个子集时,它会耗尽内存。对我来说没有意义。此外,我在 hadoop 集群上运行并且可以增加节点。甚至没有艾伦 dummies = pd.get_dummies(combi, columns=dum) 给出相同的 MemoryError
    • 你检查整个df的结果了吗?还有一件事要尝试:df2 = combi[dum].copy() dummies = pd.get_dummies(df2)
    猜你喜欢
    • 2016-01-02
    • 2013-09-12
    • 2021-07-24
    • 2020-10-15
    • 2016-09-20
    • 2023-03-06
    • 1970-01-01
    • 2020-05-04
    • 2021-10-12
    相关资源
    最近更新 更多