Ich habe ein Wörterbuch konvertieren, die wie folgt aussehen:Tupel in Reihen von zahlreichen Spalten in einer Pandas Dataframe
data = {'function_name': ['func1', 'func2', 'func3'],
'argument': [('func1_arg1', 'func1_arg2'),
('func2_arg1',),
('func3_arg1', 'func3_arg2', 'func3_arg3')],
'A': ['value_a1', 'value_a2', 'value_a3'],
'B': 'b',
'types': [('func1_type1', 'func1_type2'),
('func2_type1',),
('func3_type1', 'func3_type2', 'func3_type3')]}
Ich möchte es in einen Pandas Datenrahmen konvertieren und es wie folgt aussehen:
function_name argument types A B
func1 func1_arg1 func1_type1 value_a1 b
func1 func1_arg2 func1_type2 value_a1 b
func2 func2_arg1 func2_type1 value_a2 b
func3 func3_arg1 func3_type1 value_a3 b
func3 func3_arg2 func3_type2 value_a3 b
func3 func3_arg3 func3_type3 value_a3 b
Wie aus here folgt, wenn es eine Spalte von Tupeln wäre, hätte ich dies tun:
import pandas as pd
data_frame = pd.DataFrame(data)
new_frame = data_frame.set_index(['function_name','A','B'])['argument'].apply(pd.Series).stack().to_frame('argument').reset_index().drop('level_3',1)
Aber wie gehe ich vor, wenn ich ein paar Tupelspalten habe?
EDIT:
Es scheint mit der genehmigten Lösung ein kleines Problem zu sein. Wenn nämlich eine Tuppled-Spalte vollständig aus None
s oder nur aus leeren Tupeln besteht, werden sie bei der Bildung der new_frame
gelöscht. Ist es möglich, Pandas dazu zu bringen, die Spalten nicht fallen zu lassen?
Die Ausgangsdaten wie folgt aussehen:
data = {'function_name': ['func1', 'func2', 'func3'],
'argument': [('func1_arg1', 'func1_arg2'),
('func2_arg1',),
('func3_arg1', 'func3_arg2', 'func3_arg3')],
'A': ['value_a1', 'value_a2', 'value_a3'],
'B': 'b',
'types': [('func1_type1', 'func1_type2'),
('func2_type1',),
('func3_type1', 'func3_type2', 'func3_type3')],
'info': [(None, None), (None,), (None, None, None)]}
Die 'info' Spalten könnten [(),(),()], das Ergebnis immer noch das gleiche sei.
Yep, wie es scheint, wie Charme funktioniert! Vielen Dank für Ihre Hilfe! – BigBear
Ihre Begrüßung @bigbear – Dark
@Parfait Vielen Dank für das Aufzeigen Ich aktualisierte die Antwort – Dark