2015-01-29 15 views
66

चलाने के लिए पांडा डेटाफ्रेम के कॉलम पर पुनरावृत्ति कैसे करें मुझे यकीन है कि यह आसान है, लेकिन पाइथन के लिए एक पूर्ण नौसिखिया के रूप में, मुझे यह पता लग रहा है कि pandas डेटाफ्रेम में चरों को फिर से कैसे चालू किया जाए और एक रिग्रेशन चलाएं प्रत्येक के साथ।रिग्रेशन

यहाँ मैं क्या कर रहा है:

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() 

मैं जानता हूँ कि मैं इस तरह एक प्रतिगमन चला सकते हैं:

regs = sm.OLS(returns.FIUIX,returns.FSTMX).fit() 

लेकिन लगता है मुझे dataframe में प्रत्येक स्तंभ के लिए ऐसा करना चाहते हैं। विशेष रूप से, मैं एफएसटीएमएक्स पर FIUIX, और फिर एफएसटीएमएक्स पर एफएसएक्स, और फिर एफएसटीएमएक्स पर एफएसएवीएक्स को वापस करना चाहता हूं। प्रत्येक प्रतिगमन के बाद मैं अवशेषों को स्टोर करना चाहता हूं।

मैं निम्नलिखित के विभिन्न संस्करणों की कोशिश की है, लेकिन मैं वाक्य रचना गलत हो रही किया जाना चाहिए:

resids = {} 
for k in returns.keys(): 
    reg = sm.OLS(returns[k],returns.FSTMX).fit() 
    resids[k] = reg.resid 

मुझे लगता है कि समस्या मैं कुंजी द्वारा रिटर्न स्तंभ को संदर्भित करने के लिए कैसे नहीं जानते हैं, तो returns[k] शायद गलत है।

ऐसा करने के सर्वोत्तम तरीके पर कोई मार्गदर्शन बहुत सराहना की जाएगी। शायद एक आम पांडा दृष्टिकोण है जो मुझे याद आ रही है।

+0

आप की तरह तो कॉलम सबस्क्रिप्ट कर सकते हैं अगर मैं + 1 = लेन (DF): # एस.एम. .OLS (रिटर्न [रिटर्न.coloumns [i]], रिटर्न [return.columns [i + 1]] देता है), फिट() 'os समान – EdChum

उत्तर

132
for column in df: 
    print(df[column]) 
+0

का उपयोग करें, मुझे लगता है कि मैं केवल वापस आऊंगा जब मैं इस विधि का उपयोग करता हूं तो कॉलम हेडर। तो उदाहरण के लिए: प्रिंट (डीएफ) मुझे डेटाफ्रेम कॉलम में डेटा दिखाता है लेकिन सी में डीएफ के लिए: प्रिंट (सी) केवल हेडर को डेटा नहीं प्रिंट करता है। – user1761806

+1

ठीक है मुझे अनदेखा करें - मैं प्रिंट (कॉलम) प्रिंट नहीं कर रहा था (डीएफ [कॉलम]) – user1761806

+1

उसी नाम वाले कॉलम के लिए देखें! – freethebees

12

आप ix का उपयोग कर स्थिति द्वारा डेटाफ्रेम कॉलम को इंडेक्स कर सकते हैं।

df1.ix[:,1] 

यह उदाहरण के लिए पहला कॉलम देता है। (0 सूचकांक होगा)

df1.ix[0,] 

यह पहली पंक्ति देता है।

df1.ix[0,1] 

और इतने पर:

df1.ix[:,1] 

यह पंक्ति 0 और स्तंभ 1 के चौराहे पर मूल्य होगा। तो आप enumerate()returns.keys(): कर सकते हैं और डेटाफ्रेम को अनुक्रमणित करने के लिए संख्या का उपयोग कर सकते हैं।

+0

' ix' को बहिष्कृत किया गया है, 'iloc' –

5

DataFrame को स्थानांतरित करने और पंक्तियों पर पुनरावृत्ति करने के लिए एक कार्यवाही है।

for column_name, column in df.transpose().iterrows(): 
    print column_name 
26

आप iteritems() उपयोग कर सकते हैं:

for name, values in df.iteritems(): 
    print '{name}: {value}'.format(name=name, value=values[0]) 
1

सूची समझ का उपयोग करके आप सभी स्तंभों नाम प्राप्त कर सकते (हेडर):

[column for column in df]

1

मैं एक हूँ थोड़ा देर हो चुकी है लेकिन यहां मैंने यह कैसे किया है।कदम:

  1. एक्स संयोजन लेने के लिए सभी स्तंभों की एक सूची बनाएं
  2. उपयोग itertools
  3. संलग्न प्रत्येक परिणाम आर बाहर रखा स्तंभ सूची
  4. क्रमबद्ध परिणाम DF में साथ-साथ एक परिणाम dataframe के लिए मूल्य चुकता आर वर्ग के अवरोही क्रम को देखने के लिए सबसे अच्छा फिट कौन सा है।

यह वह कोड है जिसे मैंने डेटाफ्रेम पर aft_tmt कहा था। .. आपके उपयोग के मामले के लिए एक्सट्रपलेशन के लिए स्वतंत्र महसूस

import pandas as pd 
# setting options to print without truncating output 
pd.set_option('display.max_columns', None) 
pd.set_option('display.max_colwidth', None) 

import statsmodels.formula.api as smf 
import itertools 

# This section gets the column names of the DF and removes some columns which I don't want to use as predictors. 
itercols = aft_tmt.columns.tolist() 
itercols.remove("sc97") 
itercols.remove("sc") 
itercols.remove("grc") 
itercols.remove("grc97") 
print itercols 
len(itercols) 

# results DF 
regression_res = pd.DataFrame(columns = ["Rsq", "predictors", "excluded"]) 

# excluded cols 
exc = [] 

# change 9 to the number of columns you want to combine from N columns. 
#Possibly run an outer loop from 0 to N/2? 
for x in itertools.combinations(itercols, 9): 
    lmstr = "+".join(x) 
    m = smf.ols(formula = "sc ~ " + lmstr, data = aft_tmt) 
    f = m.fit() 
    exc = [item for item in x if item not in itercols] 
    regression_res = regression_res.append(pd.DataFrame([[f.rsquared, lmstr, "+".join([y for y in itercols if y not in list(x)])]], columns = ["Rsq", "predictors", "excluded"])) 

regression_res.sort_values(by="Rsq", ascending = False) 
5

यह जवाब एक DF में से अधिक चयनित स्तंभों के साथ-साथ सभी स्तंभों को दोहराना।

df.columns डीएफ में सभी कॉलम नामों वाली एक सूची देता है। अब यदि आप सभी कॉलम पर पुन: प्रयास करना चाहते हैं तो यह बहुत उपयोगी नहीं है। लेकिन यह तब आसान होता है जब आप केवल अपने चयन के कॉलम पर पुन: प्रयास करना चाहते हैं।

हम पाइथन की सूची को हमारी आवश्यकताओं के अनुसार df.columns को टुकड़ा करने के लिए आसानी से टुकड़ा कर सकते हैं। उदाहरण के लिए, सभी स्तंभों लेकिन पहले से अधिक तेज़ी से दोहराने में, हम कर सकते हैं:

for column in df.columns[1:]: 
    print(column) 

इसी तरह भर में उलट क्रम में कॉलम पुनरावृत्ति करने के लिए, हम कर सकते हैं:

for column in df.columns[::-1]: 
    print(column) 

हम से अधिक पुनरावृति कर सकते हैं इस तकनीक का उपयोग कर बहुत अच्छे तरीके से सभी कॉलम। यह भी याद रखें कि आप आसानी से उपयोग करने वाले सभी स्तंभों की सूचकांकों प्राप्त कर सकते हैं: लेन (DF) में मैं के लिए `:

for ind, column in enumerate(df.columns): 
    print(ind, column) 
संबंधित मुद्दे