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.
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
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
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.
Si vous connaissez la position, pourquoi ne pas simplement obtenir l'index?
Ensuite, utilisez .loc:
df.loc[index, 'COL_NAME'] = x
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
une autre façon est:
df["COL_NAME"].iloc[0]=x
É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.