当我遇到这个问题时,我需要对DataFrames进行稳定的索引排序:
如果DataFrame成为Series(当只有一列与选择匹配时),kind参数将返回错误。见例:
import pandas as pd
df_a = pd.Series(range(10))
df_b = pd.Series(range(100, 110))
df = pd.concat([df_a, df_b])
df.sort_index(kind='mergesort')
出现以下错误:
----> 6 df.sort_index(kind='mergesort')
TypeError: sort_index() got an unexpected keyword argument 'kind'
如果DataFrames(选择了多个列),则mergesort可以正常工作。
修改
从DataFrame中选择单个列时,例如:
import pandas as pd
import numpy as np
df_a = pd.DataFrame(np.array(range(25)).reshape(5,5))
df_b = pd.DataFrame(np.array(range(100, 125)).reshape(5,5))
df = pd.concat([df_a, df_b])
以下内容返回错误:
df[0].sort_index(kind='mergesort')
...因为选择被转换为pandas系列,并指出pandas.Series.sort_index文档包含错误。
然而,
df[[0]].sort_index(kind='mergesort')
工作正常,因为它的类型仍然是一个DataFrame。
答案 0 :(得分:1)
pandas.Series.sort_index()有没有 kind
参数。
这是Pandas 0.18.1(文件:./pandas/core/series.py
)的此函数的定义:
# line 1729
@Appender(generic._shared_docs['sort_index'] % _shared_doc_kwargs)
def sort_index(self, axis=0, level=None, ascending=True, inplace=False,
sort_remaining=True):
axis = self._get_axis_number(axis)
index = self.index
if level is not None:
new_index, indexer = index.sortlevel(level, ascending=ascending,
sort_remaining=sort_remaining)
elif isinstance(index, MultiIndex):
from pandas.core.groupby import _lexsort_indexer
indexer = _lexsort_indexer(index.labels, orders=ascending)
indexer = com._ensure_platform_int(indexer)
new_index = index.take(indexer)
else:
new_index, indexer = index.sort_values(return_indexer=True,
ascending=ascending)
new_values = self._values.take(indexer)
result = self._constructor(new_values, index=new_index)
if inplace:
self._update_inplace(result)
else:
return result.__finalize__(self)
档案./pandas/core/generic.py
,第39行
_shared_doc_kwargs = dict(axes='keywords for axes', klass='NDFrame',
axes_single_arg='int or labels for object',
args_transpose='axes to permute (int or label for'
' object)')
所以很可能这是pandas文档中的一个错误......
您的df
是系列,不是数据框