Pandas python panda中引用类型列表的排序问题

Pandas python panda中引用类型列表的排序问题,pandas,python-3.7,Pandas,Python 3.7,我试图对列表进行排序(基于UserInfo类),但得到一个错误-AssertionError:3列传递,传递的数据有2列。虽然当我创建一个静态数组(使用一些固定值的虚拟数组)时,我没有得到这个错误 class UserInfo: def __init__(self,name,id,address): self.Name=name self.EId=id self.Address=address from rwt import UserIn

我试图对列表进行排序(基于UserInfo类),但得到一个错误-AssertionError:3列传递,传递的数据有2列。虽然当我创建一个静态数组(使用一些固定值的虚拟数组)时,我没有得到这个错误

class UserInfo:
    def __init__(self,name,id,address):
        self.Name=name
        self.EId=id
        self.Address=address

from rwt import UserInfo
import pandas as pd
class saveuser:
    usertoadd=[]
    def adduser(self,name,id,address):
        obj1=UserInfo(name,id,address)
        obj1.Name=name
        obj1.EId=id
        obj1.Address=address
        saveuser.usertoadd.append(obj1)
    def sortbyname(self):
        labels=['Name','EId','Address']
        df = pd.DataFrame.from_records([saveuser.usertoadd],columns=labels)
        df.sort_values(by=['Name'], axis =1)
        print(df)
myObj=saveuser()
myObj.adduser("Susheel",1,"Delhi")
myObj.adduser("Kapil",3,"Dehradun")
print("---------------After sort------------------------")
myObj.sortbyname()

列表的预期结果应按名称排序。

您忘记分配给df。我假设你想让你的名字从A-Z从上到下,这样就可以了:

df = df.sort_values(by='Name')
或者你会

df.sort_values(by='Name', inplace = True)

您有多个错误。List
usertoadd
有2个
saveuser
对象,您可以将其放入一个列表以创建一个嵌套列表,并将其传递给
pd.DataFrame.from\u records
。这会导致错误:
AssertionError:3列已传递,传递的数据有2列
pd.DataFrame.from_records
不知道
saveuser
属性,如果您不明确提供属性,它也无法提取属性。您需要将
saveuser.\uuuu dict\uuu
的列表传递到
from\u records
,以便正确获取属性值对的字典

接下来,您没有将排序后的
df
保存回原始
df
,而是在错误的
轴上排序。要解决此问题,只需指定附加参数
inplace=True
,并按
axis=0

只需按如下方式更改函数sortbyname(self):

def sortbyname(self):
    labels=['Name','EId','Address']
    df = pd.DataFrame.from_records([user.__dict__ for user in saveuser.usertoadd], columns=labels)
    df.sort_values(by=['Name'], axis =0, inplace=True)
    print(df)
输出:

---------------After sort------------------------
      Name  EId   Address
1    Kapil    3  Dehradun
0  Susheel    1     Delhi

也许您应该删除axis=0,因为它是默认值。查看文件@lrh09:是的,我知道。我的目的是尽量使代码更改最小化,并尽可能详细地显示代码中的错误。在本例中,'pd.DataFrame()`构造函数工作正常,无需使用来自_records
,但我仍然使用它将代码更改保持在最小程度。