J'ai des données enregistrées dans une base de données postgreSQL. Je suis d'interrogation de ces données à l'aide de Python2.7 et de la transformer en une Pandas DataFrame. Cependant, la dernière colonne de ce dataframe a un dictionnaire (ou une liste?) des valeurs au sein de. Le DataFrame ressemble à ceci:
[1] df
Station ID Pollutants
8809 {"a": "46", "b": "3", "c": "12"}
8810 {"a": "36", "b": "5", "c": "8"}
8811 {"b": "2", "c": "7"}
8812 {"c": "11"}
8813 {"a": "82", "c": "15"}
J'ai besoin de partager cette colonne dans des colonnes distinctes, de sorte que le DataFrame ressemble à ceci:
[2] df2
Station ID a b c
8809 46 3 12
8810 36 5 8
8811 NaN 2 7
8812 NaN NaN 11
8813 82 NaN 15
Le problème majeur que je rencontre est que les listes ne sont pas les mêmes longueurs. Mais toutes les listes ne contiennent que les mêmes 3 valeurs: a, b, et c. Et ils apparaissent toujours dans le même ordre (d'abord, b, deuxième, c troisième).
Le code suivant l'habitude de travailler et de revenir exactement ce que je voulais (df2).
[3] df
[4] objs = [df, pandas.DataFrame(df['Pollutant Levels'].tolist()).iloc[:, :3]]
[5] df2 = pandas.concat(objs, axis=1).drop('Pollutant Levels', axis=1)
[6] print(df2)
J'ai été l'exécution de ce code, la semaine dernière, et ça marchait très bien. Mais maintenant, mon code est cassé et je reçois ce message d'erreur de la ligne [4]:
IndexError: out-of-bounds on slice (end)
Je n'ai pas fait de modifier le code, mais je suis maintenant l'obtention de l'erreur. J'ai l'impression que c'est à cause de ma méthode n'est pas robuste ou la bonne.
Des suggestions ou des conseils sur la façon de diviser cette colonne de listes dans des colonnes distinctes serait super apprécié!
EDIT: je pense que l' .tolist() et .appliquer les méthodes ne fonctionnent pas sur mon code, car c'est une chaîne unicode, c'est à dire:
#My data format
u{'a': '1', 'b': '2', 'c': '3'}
#and not
{u'a': '1', u'b': '2', u'c': '3'}
Les données de l'importation de la base de données postgreSQL dans ce format. Toute aide ou d'idées avec ce problème? est-il un moyen de convertir le format unicode?