2017-09-09 24 views
0

我有一個包含供應商和製造商列表的數據集。我想爲每個獨特的供應商和製造商分配一個唯一的編號。我正在使用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 ['New Logistics'] = numbers2 其中「New Supply」和「New Logistics」分別是。新列我想補充到的原始數據,當我運行最後兩個命令我得到以下錯誤的名稱: 「

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" 

誰能請我如何能完成我的任務,擺脫幫助這個錯誤? 謝謝你這麼多

回答

0

的這裏的問題是,numbersnumbers2長度不匹配X數據框的形狀。

如果你想分配一個唯一的編號,以每一個獨特的供應商和製造商,您可以創建一個映射和使用pd.map()或使用sklearn的LabelEncoder(因爲你的目標是利用機器學習在這裏)。

+0

嗨,所以一旦我使用LabelEncoder併爲每個唯一名稱分配一個標籤/號碼,我如何將新列(在這種情況下是2)插入原始數據集? – afzaaldeveloper1