我有一个包含供应商和制造商列表的数据集。我想为每个独特的供应商和制造商分配一个唯一的编号。我正在使用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"
任何人都可以帮助我如何完成任务并摆脱这个错误? 非常感谢你
答案 0 :(得分:0)
此处的问题是numbers
和numbers2
的长度与X
数据框的形状不匹配。
如果要为每个唯一供应商和制造商分配唯一编号,您可以创建映射并使用pd.map()
或使用sklearn的LabelEncoder(因为您的目标是在此处使用机器学习)