无法从字典创建 pd.Series | TypeError:“值”未排序
Posted
技术标签:
【中文标题】无法从字典创建 pd.Series | TypeError:“值”未排序【英文标题】:Cannot create pd.Series from dictionary | TypeError: 'values' is not ordered 【发布时间】:2018-11-12 16:44:32 【问题描述】:由于某种原因,我无法从此字典中创建pd.Series
对象。我用另一个非常相似的。
注意:2018 年 6 月 4 日更新 看起来有一个GitHub问题: https://github.com/pandas-dev/pandas/issues/15457
pd.__version__
'0.23.0'
import pandas as pd
from numpy import array
import numpy as np
param_index = OrderedDict([((('criterion', 'gini'), ('max_features', 'log2'), ('min_samples_leaf', 1)), array([ 0, 40, 80, 120, 160, 200])), ((('criterion', 'gini'), ('max_features', 'log2'), ('min_samples_leaf', 2)), array([ 1, 41, 81, 121, 161, 201])), ((('criterion', 'gini'), ('max_features', 'log2'), ('min_samples_leaf', 3)), array([ 2, 42, 82, 122, 162, 202])), ((('criterion', 'gini'), ('max_features', 'log2'), ('min_samples_leaf', 5)), array([ 3, 43, 83, 123, 163, 203])), ((('criterion', 'gini'), ('max_features', 'log2'), ('min_samples_leaf', 8)), array([ 4, 44, 84, 124, 164, 204])), ((('criterion', 'gini'), ('max_features', 'sqrt'), ('min_samples_leaf', 1)), array([ 5, 45, 85, 125, 165, 205])), ((('criterion', 'gini'), ('max_features', 'sqrt'), ('min_samples_leaf', 2)), array([ 6, 46, 86, 126, 166, 206])), ((('criterion', 'gini'), ('max_features', 'sqrt'), ('min_samples_leaf', 3)), array([ 7, 47, 87, 127, 167, 207])), ((('criterion', 'gini'), ('max_features', 'sqrt'), ('min_samples_leaf', 5)), array([ 8, 48, 88, 128, 168, 208])), ((('criterion', 'gini'), ('max_features', 'sqrt'), ('min_samples_leaf', 8)), array([ 9, 49, 89, 129, 169, 209])), ((('criterion', 'gini'), ('max_features', None), ('min_samples_leaf', 1)), array([ 10, 50, 90, 130, 170, 210])), ((('criterion', 'gini'), ('max_features', None), ('min_samples_leaf', 2)), array([ 11, 51, 91, 131, 171, 211])), ((('criterion', 'gini'), ('max_features', None), ('min_samples_leaf', 3)), array([ 12, 52, 92, 132, 172, 212])), ((('criterion', 'gini'), ('max_features', None), ('min_samples_leaf', 5)), array([ 13, 53, 93, 133, 173, 213])), ((('criterion', 'gini'), ('max_features', None), ('min_samples_leaf', 8)), array([ 14, 54, 94, 134, 174, 214])), ((('criterion', 'gini'), ('max_features', 0.382), ('min_samples_leaf', 1)), array([ 15, 55, 95, 135, 175, 215])), ((('criterion', 'gini'), ('max_features', 0.382), ('min_samples_leaf', 2)), array([ 16, 56, 96, 136, 176, 216])), ((('criterion', 'gini'), ('max_features', 0.382), ('min_samples_leaf', 3)), array([ 17, 57, 97, 137, 177, 217])), ((('criterion', 'gini'), ('max_features', 0.382), ('min_samples_leaf', 5)), array([ 18, 58, 98, 138, 178, 218])), ((('criterion', 'gini'), ('max_features', 0.382), ('min_samples_leaf', 8)), array([ 19, 59, 99, 139, 179, 219])), ((('criterion', 'entropy'), ('max_features', 'log2'), ('min_samples_leaf', 1)), array([ 20, 60, 100, 140, 180, 220])), ((('criterion', 'entropy'), ('max_features', 'log2'), ('min_samples_leaf', 2)), array([ 21, 61, 101, 141, 181, 221])), ((('criterion', 'entropy'), ('max_features', 'log2'), ('min_samples_leaf', 3)), array([ 22, 62, 102, 142, 182, 222])), ((('criterion', 'entropy'), ('max_features', 'log2'), ('min_samples_leaf', 5)), array([ 23, 63, 103, 143, 183, 223])), ((('criterion', 'entropy'), ('max_features', 'log2'), ('min_samples_leaf', 8)), array([ 24, 64, 104, 144, 184, 224])), ((('criterion', 'entropy'), ('max_features', 'sqrt'), ('min_samples_leaf', 1)), array([ 25, 65, 105, 145, 185, 225])), ((('criterion', 'entropy'), ('max_features', 'sqrt'), ('min_samples_leaf', 2)), array([ 26, 66, 106, 146, 186, 226])), ((('criterion', 'entropy'), ('max_features', 'sqrt'), ('min_samples_leaf', 3)), array([ 27, 67, 107, 147, 187, 227])), ((('criterion', 'entropy'), ('max_features', 'sqrt'), ('min_samples_leaf', 5)), array([ 28, 68, 108, 148, 188, 228])), ((('criterion', 'entropy'), ('max_features', 'sqrt'), ('min_samples_leaf', 8)), array([ 29, 69, 109, 149, 189, 229])), ((('criterion', 'entropy'), ('max_features', None), ('min_samples_leaf', 1)), array([ 30, 70, 110, 150, 190, 230])), ((('criterion', 'entropy'), ('max_features', None), ('min_samples_leaf', 2)), array([ 31, 71, 111, 151, 191, 231])), ((('criterion', 'entropy'), ('max_features', None), ('min_samples_leaf', 3)), array([ 32, 72, 112, 152, 192, 232])), ((('criterion', 'entropy'), ('max_features', None), ('min_samples_leaf', 5)), array([ 33, 73, 113, 153, 193, 233])), ((('criterion', 'entropy'), ('max_features', None), ('min_samples_leaf', 8)), array([ 34, 74, 114, 154, 194, 234])), ((('criterion', 'entropy'), ('max_features', 0.382), ('min_samples_leaf', 1)), array([ 35, 75, 115, 155, 195, 235])), ((('criterion', 'entropy'), ('max_features', 0.382), ('min_samples_leaf', 2)), array([ 36, 76, 116, 156, 196, 236])), ((('criterion', 'entropy'), ('max_features', 0.382), ('min_samples_leaf', 3)), array([ 37, 77, 117, 157, 197, 237])), ((('criterion', 'entropy'), ('max_features', 0.382), ('min_samples_leaf', 5)), array([ 38, 78, 118, 158, 198, 238])), ((('criterion', 'entropy'), ('max_features', 0.382), ('min_samples_leaf', 8)), array([ 39, 79, 119, 159, 199, 239]))])
pd.Series(list(param_index.values()), index=param_index.keys())
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/core/algorithms.py in factorize(values, sort, order, na_sentinel, size_hint)
634 try:
--> 635 order = uniques.argsort()
636 order2 = order.argsort()
TypeError: '<' not supported between instances of 'NoneType' and 'str'
During handling of the above exception, another exception occurred:
TypeError Traceback (most recent call last)
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/core/sorting.py in safe_sort(values, labels, na_sentinel, assume_unique)
445 try:
--> 446 sorter = values.argsort()
447 ordered = values.take(sorter)
TypeError: '<' not supported between instances of 'NoneType' and 'str'
During handling of the above exception, another exception occurred:
TypeError Traceback (most recent call last)
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/core/arrays/categorical.py in __init__(self, values, categories, ordered, dtype, fastpath)
344 try:
--> 345 codes, categories = factorize(values, sort=True)
346 except TypeError:
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/util/_decorators.py in wrapper(*args, **kwargs)
176 kwargs[new_arg_name] = new_arg_value
--> 177 return func(*args, **kwargs)
178 return wrapper
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/core/algorithms.py in factorize(values, sort, order, na_sentinel, size_hint)
642 na_sentinel=na_sentinel,
--> 643 assume_unique=True)
644
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/core/sorting.py in safe_sort(values, labels, na_sentinel, assume_unique)
449 # try this anyway
--> 450 ordered = sort_mixed(values)
451
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/core/sorting.py in sort_mixed(values)
435 dtype=bool)
--> 436 nums = np.sort(values[~str_pos])
437 strs = np.sort(values[str_pos])
~/anaconda/envs/python3/lib/python3.6/site-packages/numpy/core/fromnumeric.py in sort(a, axis, kind, order)
846 a = asanyarray(a).copy(order="K")
--> 847 a.sort(axis=axis, kind=kind, order=order)
848 return a
TypeError: '<' not supported between instances of 'NoneType' and 'str'
During handling of the above exception, another exception occurred:
TypeError Traceback (most recent call last)
<ipython-input-72-1f46691300f8> in <module>()
1 param_index = OrderedDict([((('criterion', 'gini'), ('max_features', 'log2'), ('min_samples_leaf', 1)), array([ 0, 40, 80, 120, 160, 200])), ((('criterion', 'gini'), ('max_features', 'log2'), ('min_samples_leaf', 2)), array([ 1, 41, 81, 121, 161, 201])), ((('criterion', 'gini'), ('max_features', 'log2'), ('min_samples_leaf', 3)), array([ 2, 42, 82, 122, 162, 202])), ((('criterion', 'gini'), ('max_features', 'log2'), ('min_samples_leaf', 5)), array([ 3, 43, 83, 123, 163, 203])), ((('criterion', 'gini'), ('max_features', 'log2'), ('min_samples_leaf', 8)), array([ 4, 44, 84, 124, 164, 204])), ((('criterion', 'gini'), ('max_features', 'sqrt'), ('min_samples_leaf', 1)), array([ 5, 45, 85, 125, 165, 205])), ((('criterion', 'gini'), ('max_features', 'sqrt'), ('min_samples_leaf', 2)), array([ 6, 46, 86, 126, 166, 206])), ((('criterion', 'gini'), ('max_features', 'sqrt'), ('min_samples_leaf', 3)), array([ 7, 47, 87, 127, 167, 207])), ((('criterion', 'gini'), ('max_features', 'sqrt'), ('min_samples_leaf', 5)), array([ 8, 48, 88, 128, 168, 208])), ((('criterion', 'gini'), ('max_features', 'sqrt'), ('min_samples_leaf', 8)), array([ 9, 49, 89, 129, 169, 209])), ((('criterion', 'gini'), ('max_features', None), ('min_samples_leaf', 1)), array([ 10, 50, 90, 130, 170, 210])), ((('criterion', 'gini'), ('max_features', None), ('min_samples_leaf', 2)), array([ 11, 51, 91, 131, 171, 211])), ((('criterion', 'gini'), ('max_features', None), ('min_samples_leaf', 3)), array([ 12, 52, 92, 132, 172, 212])), ((('criterion', 'gini'), ('max_features', None), ('min_samples_leaf', 5)), array([ 13, 53, 93, 133, 173, 213])), ((('criterion', 'gini'), ('max_features', None), ('min_samples_leaf', 8)), array([ 14, 54, 94, 134, 174, 214])), ((('criterion', 'gini'), ('max_features', 0.382), ('min_samples_leaf', 1)), array([ 15, 55, 95, 135, 175, 215])), ((('criterion', 'gini'), ('max_features', 0.382), ('min_samples_leaf', 2)), array([ 16, 56, 96, 136, 176, 216])), ((('criterion', 'gini'), ('max_features', 0.382), ('min_samples_leaf', 3)), array([ 17, 57, 97, 137, 177, 217])), ((('criterion', 'gini'), ('max_features', 0.382), ('min_samples_leaf', 5)), array([ 18, 58, 98, 138, 178, 218])), ((('criterion', 'gini'), ('max_features', 0.382), ('min_samples_leaf', 8)), array([ 19, 59, 99, 139, 179, 219])), ((('criterion', 'entropy'), ('max_features', 'log2'), ('min_samples_leaf', 1)), array([ 20, 60, 100, 140, 180, 220])), ((('criterion', 'entropy'), ('max_features', 'log2'), ('min_samples_leaf', 2)), array([ 21, 61, 101, 141, 181, 221])), ((('criterion', 'entropy'), ('max_features', 'log2'), ('min_samples_leaf', 3)), array([ 22, 62, 102, 142, 182, 222])), ((('criterion', 'entropy'), ('max_features', 'log2'), ('min_samples_leaf', 5)), array([ 23, 63, 103, 143, 183, 223])), ((('criterion', 'entropy'), ('max_features', 'log2'), ('min_samples_leaf', 8)), array([ 24, 64, 104, 144, 184, 224])), ((('criterion', 'entropy'), ('max_features', 'sqrt'), ('min_samples_leaf', 1)), array([ 25, 65, 105, 145, 185, 225])), ((('criterion', 'entropy'), ('max_features', 'sqrt'), ('min_samples_leaf', 2)), array([ 26, 66, 106, 146, 186, 226])), ((('criterion', 'entropy'), ('max_features', 'sqrt'), ('min_samples_leaf', 3)), array([ 27, 67, 107, 147, 187, 227])), ((('criterion', 'entropy'), ('max_features', 'sqrt'), ('min_samples_leaf', 5)), array([ 28, 68, 108, 148, 188, 228])), ((('criterion', 'entropy'), ('max_features', 'sqrt'), ('min_samples_leaf', 8)), array([ 29, 69, 109, 149, 189, 229])), ((('criterion', 'entropy'), ('max_features', None), ('min_samples_leaf', 1)), array([ 30, 70, 110, 150, 190, 230])), ((('criterion', 'entropy'), ('max_features', None), ('min_samples_leaf', 2)), array([ 31, 71, 111, 151, 191, 231])), ((('criterion', 'entropy'), ('max_features', None), ('min_samples_leaf', 3)), array([ 32, 72, 112, 152, 192, 232])), ((('criterion', 'entropy'), ('max_features', None), ('min_samples_leaf', 5)), array([ 33, 73, 113, 153, 193, 233])), ((('criterion', 'entropy'), ('max_features', None), ('min_samples_leaf', 8)), array([ 34, 74, 114, 154, 194, 234])), ((('criterion', 'entropy'), ('max_features', 0.382), ('min_samples_leaf', 1)), array([ 35, 75, 115, 155, 195, 235])), ((('criterion', 'entropy'), ('max_features', 0.382), ('min_samples_leaf', 2)), array([ 36, 76, 116, 156, 196, 236])), ((('criterion', 'entropy'), ('max_features', 0.382), ('min_samples_leaf', 3)), array([ 37, 77, 117, 157, 197, 237])), ((('criterion', 'entropy'), ('max_features', 0.382), ('min_samples_leaf', 5)), array([ 38, 78, 118, 158, 198, 238])), ((('criterion', 'entropy'), ('max_features', 0.382), ('min_samples_leaf', 8)), array([ 39, 79, 119, 159, 199, 239]))])
----> 2 pd.Series(list(param_index.values()), index=param_index.keys())
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/core/series.py in __init__(self, data, index, dtype, name, copy, fastpath)
180
181 if index is not None:
--> 182 index = _ensure_index(index)
183
184 if data is None:
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/core/indexes/base.py in _ensure_index(index_like, copy)
4955 index_like = copy(index_like)
4956
-> 4957 return Index(index_like)
4958
4959
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/core/indexes/base.py in __new__(cls, data, dtype, copy, name, fastpath, tupleize_cols, **kwargs)
433 from .multi import MultiIndex
434 return MultiIndex.from_tuples(
--> 435 data, names=name or kwargs.get('names'))
436 # other iterable of some kind
437 subarr = com._asarray_tuplesafe(data, dtype=object)
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/core/indexes/multi.py in from_tuples(cls, tuples, sortorder, names)
1354 arrays = lzip(*tuples)
1355
-> 1356 return MultiIndex.from_arrays(arrays, sortorder=sortorder, names=names)
1357
1358 @classmethod
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/core/indexes/multi.py in from_arrays(cls, arrays, sortorder, names)
1298 from pandas.core.arrays.categorical import _factorize_from_iterables
1299
-> 1300 labels, levels = _factorize_from_iterables(arrays)
1301 if names is None:
1302 names = [getattr(arr, "name", None) for arr in arrays]
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/core/arrays/categorical.py in _factorize_from_iterables(iterables)
2541 # For consistency, it should return a list of 2 lists.
2542 return [[], []]
-> 2543 return map(list, lzip(*[_factorize_from_iterable(it) for it in iterables]))
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/core/arrays/categorical.py in <listcomp>(.0)
2541 # For consistency, it should return a list of 2 lists.
2542 return [[], []]
-> 2543 return map(list, lzip(*[_factorize_from_iterable(it) for it in iterables]))
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/core/arrays/categorical.py in _factorize_from_iterable(values)
2513 codes = values.codes
2514 else:
-> 2515 cat = Categorical(values, ordered=True)
2516 categories = cat.categories
2517 codes = cat.codes
~/anaconda/envs/python3/lib/python3.6/site-packages/pandas/core/arrays/categorical.py in __init__(self, values, categories, ordered, dtype, fastpath)
349 # raise, as we don't have a sortable data structure and so
350 # the user should give us one by specifying categories
--> 351 raise TypeError("'values' is not ordered, please "
352 "explicitly specify the categories order "
353 "by passing in a categories argument.")
TypeError: 'values' is not ordered, please explicitly specify the categories order by passing in a categories argument.
【问题讨论】:
无法复制,我在0.22.0
上工作正常,现在在0.23.0
上试用
似乎是最新版本的熊猫的问题,对我来说它在0.23.0
上中断了。
我想我可以把它变成一个字符串然后literal_eval它以后我需要什么vals?它指的是什么分类的东西?
我刚刚降级到 0.22,它解决了我所有的问题。感谢您拯救了这一天。
可能值得作为问题提交。不确定这是否是预期行为。
【参考方案1】:
我认为您只需要展平索引列表即可。
In [1]: s = pd.Series(data=param_index.values(), index=[x[0] for x in param_index.keys()])
In [2]: s.head()
Out[2]:
(criterion, gini) [0, 40, 80, 120, 160, 200]
(criterion, gini) [1, 41, 81, 121, 161, 201]
(criterion, gini) [2, 42, 82, 122, 162, 202]
(criterion, gini) [3, 43, 83, 123, 163, 203]
(criterion, gini) [4, 44, 84, 124, 164, 204]
dtype: object
【讨论】:
以上是关于无法从字典创建 pd.Series | TypeError:“值”未排序的主要内容,如果未能解决你的问题,请参考以下文章