J'essaye de parcourir les lignes d'un Python Pandas dataframe. Dans chaque ligne du dataframe, j'essaie de faire référence à chaque valeur le long d'un ligne par son nom de colonne.
Voici ce que j'ai
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.Rand(10,4),columns=list('ABCD'))
print df
A B C D
0 0.351741 0.186022 0.238705 0.081457
1 0.950817 0.665594 0.671151 0.730102
2 0.727996 0.442725 0.658816 0.003515
3 0.155604 0.567044 0.943466 0.666576
4 0.056922 0.751562 0.135624 0.597252
5 0.577770 0.995546 0.984923 0.123392
6 0.121061 0.490894 0.134702 0.358296
7 0.895856 0.617628 0.722529 0.794110
8 0.611006 0.328815 0.395859 0.507364
9 0.616169 0.527488 0.186614 0.278792
J'ai utilisé cette approche pour itérer, mais cela ne me donne qu'une partie de la solution - après avoir sélectionné une ligne dans chaque itération, comment puis-je accéder aux éléments de la ligne par leur nom de colonne?
Voici ce que j'essaie de faire:
for row in df.iterrows():
print row.loc[0,'A']
print row.A
print row.index()
D'après ce que je comprends, la ligne est un Pandas série . Mais je n'ai aucun moyen d'indexer dans la série.
Est-il possible d'utiliser des noms de colonne tout en itérant simultanément sur des lignes?
J'aime aussi itertuples()
for row in df.itertuples():
print(row.A)
print(row.Index)
puisque row est un tuples nommé, si vous vouliez accéder aux valeurs de chaque ligne, cela devrait être BEAUCOUP PLUS plus rapide
course de vitesse:
df = pd.DataFrame([x for x in range(1000*1000)], columns=['A'])
st=time.time()
for index, row in df.iterrows():
row.A
print(time.time()-st)
45.05799984931946
st=time.time()
for row in df.itertuples():
row.A
print(time.time() - st)
0.48400020599365234
L'item de iterrows()
n'est pas une série, mais un tuple de (index, Series), vous pouvez donc décompresser le tuple dans la boucle for de la manière suivante:
for (idx, row) in df.iterrows():
print(row.loc['A'])
print(row.A)
print(row.index)
#0.890618586836
#0.890618586836
#Index(['A', 'B', 'C', 'D'], dtype='object')
for i in range(1,len(na_rm.columns)):
print ("column name:", na_rm.columns[i])
Sortie:
column name: seretide_price
column name: symbicort_mkt_shr
column name: symbicort_price