La source de DataFrame est une liste de dictionnaires comme -
ls = [{'fileName': 'file_01', 'col1': {'key1': 'value1a', 'key2': 'value1b'}}, {'fileName': 'file_02', 'col1' : {'key1': 'value2a', 'key2': 'value2b', 'key3': 'value2c'}}, {'fileName': 'file_03', 'col1': {'key1': 'value3a', 'key3': 'value3c'}}]
DataFrame créé en tant que
df = pd.DataFrame (ls, columns = ['fileName', 'col1'])
Pandas DataFrame df ressemble à - p >
fileName key1_value1a key1_value2a key1_value3a file_01 value1a file_02 value2a file_03 value3a
Comment puis-je convertir ceci pour qu'il ressemble à -
fileName key1 key2 key3 file_01 value1a value1b file_02 value2a value2b value2c file_03 value3a value3c
J'ai essayé -
df = pd.concat ([df ['fileName'], pd.get_dummies (df ['col1' ']. apply (pd.Series))], axis = 1)
Je vois des résultats dans certains cas comme -
fileName col1
file_01 {'key1':value1a, 'key2':value1b}
file_02 {'key1':value2a, 'key2':value2b, 'key3':value2c}
file_03 {'key1':value3a, 'key3':value3c}
3 Réponses :
Pouvez-vous essayer ce qui suit:
df1 = pd.concat([df[['fileName']], pd.DataFrame(df['col1'].to_list())], axis=1)
Ce qui précède fonctionnera si {'key1': value1a, 'key2': value1b}, {'key1': value2a, ' key2 ': value2b,' key3 ': value2c}, ... sont de type dict
Cette solution fonctionnera également, mais les solution fournie par @Vorsprung a l'air bien.
oui ils sont de type dict . J'ai essayé df1 = pd.concat ([df [['fileName']], pd.DataFrame (df ['col1']. Values)) , mais j'obtiens SyntaxError: syntaxe invalide
Il manquait un ] . df1 = pd.concat ([df [['fileName']], pd.DataFrame (df ['col1']. values)]) donne un nouveau DataFrame avec les colonnes fileName code> et 0 . 0 n'a aucune valeur.
Merci! Cette solution fonctionne également. Up a voté la même chose. Cependant, j'ai utilisé la solution fournie dans la réponse acceptée plus tôt.
Utilisez pd.json_normalize () :
In [40]: pd.concat([df['fileName'], pd.json_normalize(df['col1'])],axis=1) Out[40]: fileName key1 key2 key3 0 file_01 value1a value1b NaN 1 file_02 value2a value2b value2c 2 file_03 value3a NaN value3c
Vous pouvez essayer la solution suivante:
df1 = pd.concat([df['fileName'], df['col1'].apply(pd.Series)], axis=1)
df ['col1']. apply (pd.Series) diviser dict en colonnes séparées. p >
Merci! Cette solution fonctionne également. Up a voté la même chose. Cependant, j'ai utilisé la solution fournie dans la réponse acceptée plus tôt.
Dans votre cas, si vous vous souciez des performances, il est préférable d'utiliser la méthode pd.json_normalize () . L'utilisation de la méthode apply () est cependant flexible.
Veuillez fournir des exemples de données dans un format facile à utiliser pour les utilisateurs. Comment ce DataFrame est-il créé? Il y a des chances qu'il y ait un moyen de créer les colonnes directement, sans stocker d'abord les dictionnaires.
@AMC Question modifiée en fonction de votre entrée. La réponse acceptée permet d'obtenir les résultats souhaités à partir de l'étape initiale. Voyez-vous une meilleure approche pour éviter le problème au moment de la création de DataFrame lui-même?