Python sort_values()获取了意外的关键字参数';由';

Python sort_values()获取了意外的关键字参数';由';,python,pandas,dataframe,Python,Pandas,Dataframe,但是它在for循环之外工作 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.Data

但是它在for循环之外工作

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

我很困惑。

这是因为
loc
操作符的结果在您的例子中是一个
pandas.Series
对象。在本例中,
sort_values
没有关键字参数
by
,因为它只能对序列值进行排序。在
pandas.DataFrame

pandas.Series

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

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

对于stru列表中的i:#stru列表是包含一些字符串的集合

df.loc[i].sort_值(按='XXX')

因为参数i在数据帧中只出现一次

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

df.loc['string'].sort_值(by='XXX')

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

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

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

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


希望这有帮助。

df.loc[something]
可能会返回一个序列或数据帧。如果索引中多次出现
something
,则结果为数据帧。
df.loc['string'].sort_values(by = 'XXX')
>>> type(df.loc['string'])
>>> pandas.core.frame.DataFrame