sort_values()得到了一个意想不到的关键字参数' by'

时间:2018-06-05 10:46:09

标签: python pandas dataframe

for i in str_list:   #str_list is a set contain some strings 
    df.loc[i].sort_values(by = 'XXX')
**TypeError**: sort_values() got an unexpected keyword argument 'by' ".
>>> type(df.loc[i])
>>> pandas.core.frame.DataFrame

但它在for循环之外工作!

df.loc['string'].sort_values(by = 'XXX')
>>> type(df.loc['string'])
>>> pandas.core.frame.DataFrame

我很困惑。

2 个答案:

答案 0 :(得分:5)

这是因为loc运算符的结果是您的pandas.Series对象。在这种情况下,sort_values没有关键字参数by,因为它只能对系列值进行排序。当您在sort values

中致电pandas.DataFrame时,请查看签名的不同之处

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_values.html

当您在sort_values

中致电pandas.Series

http://pandas.pydata.org/pandas-docs/version/0.22/generated/pandas.Series.sort_values.html

答案 1 :(得分:1)

要添加到答案中, 为什么在一种情况下返回一个序列而在另一种情况下返回一个数据帧?

.loc函数在第一种情况下返回系列

对于str_list中的i:#str_list是一个包含一些字符串的集合

df.loc [ i ]。sort_values(by ='XXX')

因为参数 i 在DataFrame中仅出现一次。

在第二种情况下,“字符串”是重复的,因此将返回一个DataFrame。

df.loc ['string']。sort_values(by ='XXX')

如果'string'参数没有重复,则 请注意,如果.loc中的参数在列表中,则也存在一些差异。 例如。

df.loc ['string']->返回一个系列

df.loc [['string']]->返回一个数据框

也许在第二种情况下,您将['string']作为参数而不是'string'?

希望这会有所帮助。