@sandrosute: Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).
Numpy wird importiert aber gar nicht verwendet.
Die Zeile mit dem `to_records()`-Aufruf ist komplett sinnfrei, weil mit dem Ergebnis dann ja gar nichts gemacht wird.
Beim Erstellen beider `DataFrame`-Objekte kann man sich das leere Wörterbuch sparen. Wobei man das erstellen beim ersten natürlich deutlich einfacher haben kann wenn man dort ein Wörterbuch mit den Daten übergibt.
Hier also erst einmal Dein Beispiel überarbeitet:
Code: Alles auswählen
#!/usr/bin/env python3
import pandas as pd
def main():
spaltenbeschriftung_df = pd.DataFrame({"136": ["1", "123", "456"]})
print(spaltenbeschriftung_df)
werteliste_df = pd.DataFrame(columns=spaltenbeschriftung_df)
werteliste_df.loc[0, 456] = 1
print(werteliste_df)
if __name__ == "__main__":
main()
Das erste Problem ist, das der `DataFrame` ja eine zweidimensionale Datenstruktur ist und Du anscheinend ja nur ganz normale Spalten haben willst, also eindimensionale. Der `DataFrame` lässt dich das trotzdem so machen, weil `DataFrame`-Objekte auch mehrstufige Indexe erlauben. Du willst aber nur die Daten in der "136"-Spalte als Spalten im zweiten `DataFrame` also darfst Du da für `columns` auch nur diese Spalte übergeben und nicht den gesamten `DataFrame`:
Code: Alles auswählen
#!/usr/bin/env python3
import pandas as pd
def main():
spaltenbeschriftung_df = pd.DataFrame({"136": ["1", "123", "456"]})
print(spaltenbeschriftung_df)
werteliste_df = pd.DataFrame(columns=spaltenbeschriftung_df["136"])
werteliste_df.loc[0, 456] = 1
print(werteliste_df)
if __name__ == "__main__":
main()
Ausgabe:
Code: Alles auswählen
136
0 1
1 123
2 456
136 1 123 456 456
0 NaN NaN NaN 1.0
Schon etwas besser, aber jetzt gibt es zwei 456-Spalten. Also technisch ist das eine 456-Spalte und eine "456"-Spalte. Es gibt halt einen Unterschied zwischen einer Zahl und einer Zeichenkette die die Ziffern enthält. Das ist nicht das gleiche:
Also hier die Endfassung:
Code: Alles auswählen
#!/usr/bin/env python3
import pandas as pd
def main():
spaltenbeschriftung_df = pd.DataFrame({"136": ["1", "123", "456"]})
print(spaltenbeschriftung_df)
werteliste_df = pd.DataFrame(columns=spaltenbeschriftung_df["136"])
werteliste_df.loc[0, "456"] = 1
print(werteliste_df)
if __name__ == "__main__":
main()
Ausgabe:
Wobei das ein bisschen komisch aussieht. Sicher, dass das ein `DataFrame` sein muss? Das sieht irgendwie mehr nach einem Wörterbuch aus. Das erste vielleicht auch schon, denn zumindest in diesem Beispiel wird mit den `DataFrame`-Objekten nichts gemacht wofür man `DataFrame`-Objekte brauchen würde.
Code: Alles auswählen
#!/usr/bin/env python3
def main():
spaltenbeschriftung = {"136": ["1", "123", "456"]}
print(spaltenbeschriftung)
werteliste = dict.fromkeys(spaltenbeschriftung["136"])
werteliste["456"] = 1
print(werteliste)
if __name__ == "__main__":
main()
Ausgabe:
Code: Alles auswählen
{'136': ['1', '123', '456']}
{'1': None, '123': None, '456': 1}