Saya yakin ini sederhana, tetapi sebagai pemula yang lengkap untuk python, saya mengalami kesulitan mencari cara untuk mengulangi variabel dalam pandas
kerangka data dan menjalankan regresi dengan masing-masing.
Inilah yang saya lakukan:
all_data = {}
for ticker in ['FIUIX', 'FSAIX', 'FSAVX', 'FSTMX']:
all_data[ticker] = web.get_data_yahoo(ticker, '1/1/2010', '1/1/2015')
prices = DataFrame({tic: data['Adj Close'] for tic, data in all_data.iteritems()})
returns = prices.pct_change()
Saya tahu saya dapat menjalankan regresi seperti ini:
regs = sm.OLS(returns.FIUIX,returns.FSTMX).fit()
tapi anggaplah saya ingin melakukan ini untuk setiap kolom di dataframe. Secara khusus, saya ingin mundur FIUIX di FSTMX, dan kemudian FSAIX di FSTMX, dan kemudian FSAVX di FSTMX. Setelah setiap regresi saya ingin menyimpan residu.
Saya sudah mencoba berbagai versi berikut ini, tetapi saya pasti salah mengerti sintaks:
resids = {}
for k in returns.keys():
reg = sm.OLS(returns[k],returns.FSTMX).fit()
resids[k] = reg.resid
Saya pikir masalahnya adalah saya tidak tahu bagaimana merujuk ke kolom pengembalian dengan kunci, jadi returns[k]
mungkin salah.
Bimbingan apa pun tentang cara terbaik untuk melakukan ini akan sangat dihargai. Mungkin ada pendekatan panda umum yang saya lewatkan.
sumber
for i in len(df): if i + 1 != len(df): # sm.OLS(returns[returns.coloumns[i]], returns[returns.columns[ i+1]]), fit()
Jawaban:
sumber
for x in df
untuk beralih dari baris, meskipun. : - /for idx, row in df.iterrows()
beralih di atas baris. Karena operasi colbased adalah vektor, itu wajar bahwa iterasi utama adalah lebih dari kolom :)Anda bisa menggunakan
iteritems()
:sumber
Jawaban ini untuk beralih di atas kolom yang dipilih serta semua kolom di DF.
df.columns
memberikan daftar yang berisi semua nama kolom di DF. Nah, itu tidak terlalu membantu jika Anda ingin mengulang semua kolom. Tapi itu berguna ketika Anda ingin beralih di atas kolom yang Anda pilih saja.Kita dapat menggunakan daftar Python mengiris dengan mudah untuk mengiris kolom df. sesuai dengan kebutuhan kita. Misalnya, untuk mengulangi semua kolom tapi yang pertama, kita bisa melakukan:
Demikian pula untuk beralih pada semua kolom dalam urutan terbalik, kita dapat melakukan:
Kita dapat mengulangi semua kolom dengan banyak cara keren menggunakan teknik ini. Ingat juga bahwa Anda bisa mendapatkan indeks dari semua kolom dengan mudah menggunakan:
sumber
Anda dapat mengindeks kolom dataframe dengan posisi menggunakan
ix
.Ini mengembalikan kolom pertama misalnya. (0 akan menjadi indeks)
Ini mengembalikan baris pertama.
Ini akan menjadi nilai di persimpangan baris 0 dan kolom 1:
dan seterusnya. Jadi Anda bisa
enumerate()
returns.keys():
dan menggunakan nomor tersebut untuk mengindeks dataframe.sumber
ix
sudah usang, gunakaniloc
Solusi adalah untuk mengubah posisi
DataFrame
dan beralih di atas baris.sumber
Menggunakan pemahaman daftar, Anda bisa mendapatkan semua nama kolom (tajuk):
[column for column in df]
sumber
list(df.columns)
atau[c for c in df]
Berdasarkan jawaban yang diterima , jika indeks yang sesuai untuk setiap kolom juga diinginkan :
df[column]
Jenis di atas adalahSeries
, yang dapat dengan mudah dikonversi menjadinumpy
ndarray
s:sumber
Saya agak terlambat tetapi inilah cara saya melakukan ini. Langkah langkah:
Ini adalah kode yang saya gunakan pada DataFrame dipanggil
aft_tmt
. Jangan ragu untuk meramalkan kasus penggunaan Anda ..sumber