web-dev-qa-db-fra.com

Définir la valeur d'une cellule particulière dans les pandas DataFrame avec iloc

J'ai une question similaire à this et this . La différence est que je dois sélectionner ligne par position, car je ne connais pas l'index. 

Je veux faire quelque chose comme df.iloc[0, 'COL_NAME'] = x, mais iloc n'autorise pas ce type d'accès. Si je fais df.iloc[0]['COL_NAME] = x, l'avertissement concernant l'indexation chaînée apparaît.

19
luna1999

Pour les positions et index mixtes, utilisez .ix. MAIS vous devez vous assurer que votre index n’est pas d’entier, sinon vous risquez de vous perdre.

df.ix[0, 'COL_NAME'] = x

Mettre à jour:

Sinon, essayez

df.iloc[0, df.columns.get_loc('COL_NAME')] = x

Exemple:

import pandas as pd
import numpy as np

# your data
# ========================
np.random.seed(0)
df = pd.DataFrame(np.random.randn(10, 2), columns=['col1', 'col2'], index=np.random.randint(1,100,10)).sort_index()

print(df)


      col1    col2
10  1.7641  0.4002
24  0.1440  1.4543
29  0.3131 -0.8541
32  0.9501 -0.1514
33  1.8676 -0.9773
36  0.7610  0.1217
56  1.4941 -0.2052
58  0.9787  2.2409
75 -0.1032  0.4106
76  0.4439  0.3337

# .iloc with get_loc
# ===================================
df.iloc[0, df.columns.get_loc('col2')] = 100

df

      col1      col2
10  1.7641  100.0000
24  0.1440    1.4543
29  0.3131   -0.8541
32  0.9501   -0.1514
33  1.8676   -0.9773
36  0.7610    0.1217
56  1.4941   -0.2052
58  0.9787    2.2409
75 -0.1032    0.4106
76  0.4439    0.3337
47
Jianxun Li

Une chose que j’ajouterais ici est que la fonction at sur une trame de données est beaucoup plus rapide, en particulier si vous faites beaucoup d’affectations de valeurs individuelles (et non de coupes). 

df.at[index, 'col_name'] = x

Dans mon expérience, j'ai eu une accélération de 20x. Ici est une rédaction en espagnol qui donne néanmoins une impression de ce qui se passe. 

8
ford prefect

Si vous connaissez la position, pourquoi ne pas simplement obtenir l'index?

Ensuite, utilisez .loc:

df.loc[index, 'COL_NAME'] = x
6
AZhao

Une autre méthode consiste à obtenir l'index de la ligne, puis à utiliser df.loc ou df.at. 

# get row index 'label' from row number 'irow'
label = df.index.values[irow] 
df.at[label, 'COL_NAME'] = x
2
Karl I.

une autre façon est:

df["COL_NAME"].iloc[0]=x
1
moongraber

Étendre la réponse de Jianxun en utilisant set_value mehtod dans les pandas. Il définit la valeur d'une colonne à un index donné.

D'après les documentations sur les pandas:

DataFrame.set_value (index, col, valeur)

Pour définir la valeur à un index particulier pour une colonne, procédez comme suit:

df.set_value(index, 'COL_NAME', x)

J'espère que ça aide.

0
Om Prakash