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
我很困惑。
答案 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'?
希望这会有所帮助。