Disons que j'ai le cadre de données Pandas suivant, sans lignes pour le moment:
'Jeep' | 'Volvo' | 'Honda' ---------------------------- 7 | 0 | 5
J'ai la série Pandas suivante:
Honda 5 Nissan 3 Jeep 7 Toyota 2
Je souhaite ajouter cette série sous forme de ligne (sans inclure les éléments qui ne correspondent pas à un nom de colonne)
Résultat:
'Jeep' | 'Volvo' | 'Honda' --------------------------
Est-il possible de faire ça?
3 Réponses :
Vous pouvez utiliser append
pour obtenir les colonnes spécifiques:
>>> df1 = df.append(s, ignore_index=True) >>> df1[df.columns].fillna(0) Jeep Volvo Honda 0 7.0 0.0 5.0 >>>
Ce code est virtuellement:
>>> import pandas as pd >>> df = pd.DataFrame(columns=['Jeep', 'Volvo', 'Honda']) >>> s = pd.Series([5, 3, 7, 2],index=['Honda', 'Nissan', 'Jeep', 'Toyota']) >>> df1 = df.append(s, ignore_index=True) >>> df1[df.columns].fillna(0) Jeep Volvo Honda 0 7.0 0.0 5.0 >>>
p>
Cela semble également ajouter `` Nissan '' comme colonne. Je voudrais qu'il n'en ignore pas déjà les colonnes.
import pandas as pd df = pd.DataFrame(columns=['Jeep', 'Volvo', 'Honda']) s = pd.Series({"Honda": 5, "Nissan": 3, "Jeep": 7, "Toyota": 2}) df.append(s[df.columns], ignore_index=True).fillna(0)
Bonne idée, juste un petit tweak de la mienne :-)
Le moindre des ajustements, haha
Lol, ouais :-): p
Vous pouvez utiliser réindexer
de différentes manières décrites ci-dessous.
df.append(series.reindex(df.columns, fill_value=0).rename(len(df))) Jeep Volvo Honda 0 7 0 5
series.reindex(df.columns, fill_value=0).to_frame().T Jeep Volvo Honda 0 7 0 5
series.to_frame().T.reindex(df.columns, axis=1, fill_value=0) Jeep Volvo Honda 0 7 0 5
df = pd.DataFrame (); df.append (pd.DataFrame (pd.Series ([1,2,3], index = ['a', 'b', 'c'])). T)
Cela peut ne pas être très pertinent à part pour vous, mais
collections.Counter
gère la sémantique de l'ajout de deux compteurs, des clés manquantes, etc. beaucoup plus gracieusement. De plus, si vous avez une liste complète des marques de voitures, il est plus simple d'initialiser votre df à l'avance, avec zéro compte?