Saya mencoba mengiterasi baris-baris dataframe Python Pandas. Di dalam setiap baris dataframe, saya mencoba merujuk ke setiap nilai di sepanjang baris dengan nama kolomnya.
Inilah yang saya miliki:
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
Saya menggunakan pendekatan ini untuk melakukan iterasi, tetapi hanya memberikan saya sebagian dari solusi - setelah memilih baris di setiap iterasi, bagaimana saya mengakses elemen baris berdasarkan nama kolomnya?
Inilah yang saya coba lakukan:
for row in df.iterrows():
print row.loc[0,'A']
print row.A
print row.index()
Pemahaman saya adalah bahwa baris tersebut adalah Pandas series. Tapi saya tidak punya cara untuk mengindeks ke dalam Series.
Apakah mungkin untuk menggunakan nama kolom sekaligus mengiterasi baris?
Saya juga menyukai itertuples()
for row in df.itertuples():
print(row.A)
print(row.Index)
karena baris adalah tupel bernama, jika Anda bermaksud mengakses nilai pada setiap baris, ini seharusnya MUCH lebih cepat
kecepatan lari:
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
Item dari iterrows()
bukanlah sebuah Series, tetapi sebuah tuple dari (index, Series), sehingga Anda dapat membongkar tuple dalam loop for seperti ini:
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 ("nama kolom:", na_rm.columns[i])
Keluaran:
column name: seretide_price
column name: symbicort_mkt_shr
column name: symbicort_price