如何在Python数据集中插入新列

时间:2017-09-09 19:49:59

标签: python

我有一个包含供应商和制造商列表的数据集。我想为每个独特的供应商和制造商分配一个唯一的编号。我正在使用Python,我这样做是为了执行一些机器学习预测。这就是我到目前为止所拥有的

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.read_csv('MasterData030617.csv')
X = df.dropna(axis=0)
numbers= np.unique(X['Supplier'], return_inverse=True)
numbers2 = np.unique(X['Logistics'], return_inverse=True)

现在问题出现了。我想获取这些新列并添加/插入到我的原始数据集中。我认为以下是正确的方法,但我得到错误: X [' New Supply'] =数字 X ['新物流'] =数字2 在哪里"新供应'和'新物流'是我想要添加到原始数据的新列的名称。当我运行最后两个命令时,我收到以下错误: "

ValueError                                Traceback (most recent call last)
<ipython-input-18-91f4a141e070> in <module>()
----> 1 X['New Supply'] = numbers
      2 X['New Logistics'] = numbers2

//anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc in __setitem__(self, key, value)
   2417         else:
   2418             # set column
-> 2419             self._set_item(key, value)
   2420 
   2421     def _setitem_slice(self, key, value):

//anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc in _set_item(self, key, value)
   2483 
   2484         self._ensure_valid_index(value)
-> 2485         value = self._sanitize_column(key, value)
   2486         NDFrame._set_item(self, key, value)
   2487 

//anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc in _sanitize_column(self, key, value, broadcast)
   2654 
   2655             # turn me into an ndarray
-> 2656             value = _sanitize_index(value, self.index, copy=False)
   2657             if not isinstance(value, (np.ndarray, Index)):
   2658                 if isinstance(value, list) and len(value) > 0:

//anaconda/lib/python2.7/site-packages/pandas/core/series.pyc in _sanitize_index(data, index, copy)
   2798 
   2799     if len(data) != len(index):
-> 2800         raise ValueError('Length of values does not match length of ' 'index')
   2801 
   2802     if isinstance(data, PeriodIndex):

ValueError: Length of values does not match length of index"

任何人都可以帮助我如何完成任务并摆脱这个错误? 非常感谢你

1 个答案:

答案 0 :(得分:0)

此处的问题是numbersnumbers2的长度与X数据框的形状不匹配。

如果要为每个唯一供应商和制造商分配唯一编号,您可以创建映射并使用pd.map()或使用sklearn的LabelEncoder(因为您的目标是在此处使用机器学习)