J'ai des données enregistrées dans une base de données postgreSQL. J'interroge ces données en utilisant Python2.7 et je les transforme en un Pandas DataFrame. Cependant, la dernière colonne de ce dataframe contient un dictionnaire (ou une liste?) De valeurs. 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"}
Je dois diviser cette colonne en colonnes séparées pour 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 principal problème que j'ai, c'est que les listes ne sont pas de la même longueur. Mais toutes les listes ne contiennent que les 3 mêmes valeurs: a, b et c. Et ils apparaissent toujours dans le même ordre (un premier, b deuxième, c troisième).
Le code suivant utilisé pour fonctionner et retourner 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'exécutais ce code la semaine dernière et cela fonctionnait bien. Mais maintenant, mon code est cassé et j'obtiens cette erreur de la ligne [4]:
IndexError: out-of-bounds on slice (end)
Je n'ai apporté aucune modification au code mais j'obtiens maintenant l'erreur. Je pense que cela est dû au fait que ma méthode n'est ni robuste ni appropriée.
Toutes suggestions ou conseils sur la façon de diviser cette colonne de listes en colonnes séparées seraient très appréciés!
EDIT: Je pense que les méthodes .tolist () et .apply ne fonctionnent pas sur mon code car il s'agit d'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 sont importées de la base de données postgreSQL dans ce format. Avez-vous de l'aide ou des idées sur ce problème? y a-t-il un moyen de convertir l'unicode?
iloc[:, :3]
suppose-t-il qu'il y aura 3 éléments, et peut-être que les tranches de données plus récentes n'en ont que 1 ou 2 (par exemple, il n'y a pas de b
like in index 8813
)?
iloc
partie