Umbenennen von Spalten beim Abfragen mit SQLAlchemy in Pandas DataFramePython

Python-Programme
Anonymous
 Umbenennen von Spalten beim Abfragen mit SQLAlchemy in Pandas DataFrame

Post by Anonymous »

Gibt es eine Möglichkeit, die SqlAlchemy-Attributnamen beizubehalten, wenn Sie die Daten in einen Pandas-Datenrahmen abfragen?

Hier ist eine einfache Zuordnung meiner Datenbank. Für die Schultabelle habe ich „SchoolDistrict“, den DB-Namen, in ein kürzeres „District“ umbenannt. Ich habe mehrere Ebenen aus dem DBA entfernt, daher ist es nicht möglich, sie in der Quelle zu ändern.

Code: Select all

class School(Base):
__tablename__ = 'DimSchool'

id = Column('SchoolKey', Integer, primary_key=True)
name = Column('SchoolName', String)
district = Column('SchoolDistrict', String)

class StudentScore(Base):
__tablename__ = 'FactStudentScore'

SchoolKey = Column('SchoolKey', Integer, ForeignKey('DimSchool.SchoolKey'), primary_key = True)
PointsPossible = Column('PointsPossible', Integer)
PointsReceived = Column('PointsReceived', Integer)

school = relationship("School", backref='studentscore')
Wenn ich also etwas abfrage wie:

Code: Select all

query = session.query(StudentScore, School).join(School)
df = pd.read_sql(query.statement, query.session.bind)
Am Ende habe ich den zugrunde liegenden „SchoolDistrict“-Namen für die Spalte und nicht meinen Attributnamen im zurückgegebenen DataFrame-DF.

BEARBEITEN:
Ein noch ärgerlicherer Fall ist, wenn in mehreren Tabellen doppelte Spaltennamen vorhanden sind. Zum Beispiel:

Code: Select all

class Teacher(Base):
__tablename__ = 'DimTeacher'

id = Column('TeacherKey', Integer, primary_key=True)
fname = Column('FirstName', String)
lname = Column('FirstName', String)

class Student(Base):
__tablename__ = 'DimStudent'

id = Column('StudentKey', Integer, primary_key=True)
fname = Column('FirstName', String)
lname = Column('FirstName', String)
Eine Abfrage über beide Tabellen (wie die folgende) erzeugt also einen Datenrahmen mit doppelten Spalten „Vorname“ und „Nachname“.

Code: Select all

query = session.query(StudentScore, Student, Teacher).join(Student).join(Teacher)
Wäre es möglich, diese Spalten zum Zeitpunkt der Abfrage umzubenennen? Im Moment fällt es mir schwer, bei diesen beiden Systemen von Spaltennamen den Überblick zu behalten.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post