web-dev-qa-db-fra.com

Pandas - ajoute de la valeur à un iloc spécifique dans la nouvelle colonne de la structure de données)

J'ai un grand dataframe contenant beaucoup de colonnes.

Pour chaque ligne/index dans le cadre de données, je fais des opérations, je lis des données auxiliaires, etc., et j'obtiens une nouvelle valeur. Existe-t-il un moyen d’ajouter cette nouvelle valeur dans une nouvelle colonne à la ligne/index correcte?

Je peux utiliser .assign pour ajouter une nouvelle colonne, mais comme je passe en boucle sur les lignes et que je ne génère que les données à ajouter pour une valeur à la fois (sa génération est assez complexe). Quand il est généré, j'aimerais l'ajouter immédiatement à la structure de données plutôt que d'attendre d'avoir généré la série complète.

Cela ne fonctionne pas et donne une erreur clé:

df['new_column_name'].iloc[this_row]=value

Dois-je d'abord initialiser la colonne ou autre chose?

20
Rob

Il y a deux étapes pour créer et remplir une nouvelle colonne en utilisant uniquement un numéro de ligne ... (dans cette approche iloc n'est pas utilisé)

Tout d’abord, obtenez la valeur index de la ligne en utilisant le numéro de la ligne

rowIndex = df.index[someRowNumber]

Ensuite, utilisez index de ligne avec la fonction loc pour référencer la ligne spécifique et ajouter la nouvelle colonne/valeur

df.loc[rowIndex, 'New Column Title'] = "some value"

Ces deux étapes peuvent être combinées en une seule ligne comme suit

df.loc[df.index[someRowNumber], 'New Column Title'] = "some value"
23
RumbleFish

Si vous avez un dataframe comme

import pandas as pd
df = pd.DataFrame(data={'X': [1.5, 6.777, 2.444, pd.np.NaN], 'Y': [1.111, pd.np.NaN, 8.77, pd.np.NaN], 'Z': [5.0, 2.333, 10, 6.6666]})

Au lieu d'iloc, vous pouvez utiliser .loc avec un index de ligne et un nom de colonne comme df.loc[row_indexer,column_indexer]=value

df.loc[[0,3],'Z'] = 3

Sortie:

 X Y Z [.____] 0 1.500 1.111 3.000 
 1 6.777 NaN 2.333 
 2 2.444 8.770 10.000 
 3 NaN NaN 3.000 
11
Bharath M