Copier toutes les valeurs dans une colonne d'une nouvelle colonne de pandas dataframe
C'est une question très simple, je n'arrive pas à trouver une réponse.
j'ai un dataframe comme celle-ci, appelée df:
A B C
a.1 b.1 c.1
a.2 b.2 c.2
a.3 b.3 c.3
puis j'extrait toutes les lignes de df, où la colonne ' B 'a une valeur de' B. 2". J'attribue ces résultats à df_2.
df_2 = df[df['B'] == 'b.2']
df_2 devient:
A B C
a.2 b.2 c.2
ensuite, je copie toutes les valeurs de la colonne 'B' dans une nouvelle colonne nommée 'D'. Faisant en sorte que df_2 devienne:
A B C D
a.2 b.2 c.2 b.2
quand je préformer une tâche comme ceci:
df_2['D'] = df_2['B']
j'obtiens le message d'avertissement suivant:
une valeur essaie d'être définie sur une copie d'une tranche d'une DataFrame. Essayer utiliser. loc[row_indexer, col_indexer] = valeur à la place de
voir les mises en garde dans la documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
j'ai aussi essayé d'utiliser .loc lors de la création de df_2 comme ceci:
df_2 = df.loc[df['B'] == 'b.2']
cependant, je reçois toujours l'avertissement.
Toute aide est grandement appréciée.
3 réponses
vous pouvez simplement assigner le B
pour la nouvelle colonne , Comme -
df['D'] = df['B']
Exemple/Demo -
In [1]: import pandas as pd
In [2]: df = pd.DataFrame([['a.1','b.1','c.1'],['a.2','b.2','c.2'],['a.3','b.3','c.3']],columns=['A','B','C'])
In [3]: df
Out[3]:
A B C
0 a.1 b.1 c.1
1 a.2 b.2 c.2
2 a.3 b.3 c.3
In [4]: df['D'] = df['B'] #<---What you want.
In [5]: df
Out[5]:
A B C D
0 a.1 b.1 c.1 b.1
1 a.2 b.2 c.2 b.2
2 a.3 b.3 c.3 b.3
In [6]: df.loc[0,'D'] = 'd.1'
In [7]: df
Out[7]:
A B C D
0 a.1 b.1 c.1 d.1
1 a.2 b.2 c.2 b.2
2 a.3 b.3 c.3 b.3
le problème est dans la ligne avant celui qui lance l'avertissement. Quand vous créez df_2, c'est là que vous créez une copie d'une tranche d'une base de données. Au lieu de cela, lorsque vous créez df_2, utilisez.copier() et que vous n'obtenez pas de cette mise en garde plus tard sur.
df_2 = df[df['B'] == 'b.2'].copy()
je pense que la bonne méthode d'accès est l'aide de l'index:
df_2.loc[:,'D'] = df_2['B']