Je souhaite ajouter une ou plusieurs valeurs au dataframe existant. Mon dataframe ressemble à:
for x,n in zip(u,grps):
# Filter Dataframe based on X and create new Dataframe
df=raw.df[raw.df[raw.df.header['User']].isin(x)]
#Create List of difference between new Dataframe and List X
xList=(list(set(x)-set(df['User'])))
# Add xList of Users to df Column
df.loc[len(df)]=xList
J'ai une liste qui aura parfois 1 ou plusieurs utilisateurs.
A B 0 user1 value 1 user2 value 2 user3 value 3 user4 value 4 user5 nan 5 user6 nan
Je veux donc simplement ajouter utilisateurs supplémentaires dans la liste de la colonne A. Cela devra fonctionner s'il n'y a qu'une ou plusieurs valeurs dans la liste car celle-ci passe par une boucle.
Il n'y aura aucune valeur pour la colonne B des utilisateurs ajoutés à la colonne A de la liste. La valeur de la colonne B sera juste Nan
x = ['user5', 'user6']
Lorsque j'exécute le code ci-dessous, je ne vois pas ma taille de Dataframe augmenter.
A B 0 user1 value 1 user2 value 2 user3 value 3 user4 value
Mon code fonctionne correctement, jusqu'au point d'insérer les données.
4 Réponses :
Vous pouvez créer un nouveau dataframe avec les nouvelles données et l'ajouter à votre existant:
df = pd.concat([df, a], ignore_index=Trie)
pd.concat fonctionne également:
XXX
Créez un nouveau DataFrame et ajoutez ou concat code> à l'original:
xList= list(set(x)-set(df['User']))
for i in xList:
df.loc[len(df), 'User'] = i
print (df)
User Value
0 user1 value
1 user2 value
2 user3 value
3 user4 value
4 user5 NaN
5 user6 NaN
Une autre solution avec réglage avec agrandissement :
print (df)
User Value
0 user1 value
1 user2 value
2 user3 value
3 user4 value
x = ['user5', 'user6']
xList= list(set(x)-set(df['User']))
df = df.append(pd.DataFrame({'User': xList}), ignore_index=True)
#alternative
#df = pd.concat([df, pd.DataFrame({'User': xList})], ignore_index=True)
print (df)
User Value
0 user1 value
1 user2 value
2 user3 value
3 user4 value
4 user5 NaN
5 user6 NaN
Vous êtes génial @jezrael +1.
Juste une autre approche:
DataFrame existant:
for i in x:
df = df.append({'A': i}, ignore_index=True)
print(df)
A B
0 user1 value
1 user2 value
2 user3 value
3 user4 value
4 user5 NaN
5 user6 NaN
Nouvelle liste d'utilisateurs à ajouter:
x = ['user5', 'user6']
Solution: juste via une boucle avec la méthode pandas.DataFrame.append .
>>> df
A B
0 user1 value
1 user2 value
2 user3 value
3 user4 value
Si la série A représente un identifiant unique, envisagez d'en faire votre index. Vous pouvez ensuite utiliser pd.Index.difference et pd.DataFrame.reindex méthodes:
print(df.reset_index())
A B
0 user1 value
1 user2 value
2 user3 value
3 user4 value
4 user5 NaN
5 user6 NaN
Si vous souhaitez élever à nouveau l'index à une série, vous pouvez reset_index :
df = df.set_index('A')
x = pd.Index(['user5', 'user6'])
new_users = x.difference(df.index)
df = df.reindex(df.index.union(new_users))
# alternative:
# df = df.reindex(np.hstack((df.index, new_users)))
print(df)
B
A
user1 value
user2 value
user3 value
user4 value
user5 NaN
user6 NaN
@ jpp, gentil +1