मैं अजगर में कुछ के साथ संघर्ष कर रहा हूँ ...
मेरे पास एक फ़ंक्शन है कि जब मैं एक तिथि इनपुट करता हूं, तो यह मुझे 30 कीमतों (प्रत्येक पंक्ति में एक) और इंडेक्स 30 नामों के साथ एक कॉलम वापस देता है।
[in] getPrice('14/07/2015')
[out]
apple 10
pear 20
orange 12
banana 23
etc...
फलों की संख्या समान है। मैं जो करने की कोशिश कर रहा हूं, वह इस फ़ंक्शन को इन फलों की कीमत के साथ एक बड़ी फ़ाइल प्राप्त करने के लिए उन सभी दिनों के लिए है जो मेरे पास सूची में हैं। ज़िप फ़ंक्शन के साथ मैं वास्तव में यह नहीं समझता कि यह कैसे काम कर सकता है और परिशिष्ट फ़ंक्शन के साथ यह कीमत को 'ज़िपिंग' नहीं कर रहा है, जिसका अर्थ है कि यह हर बार इंडेक्स को फिर से बनाता है, आदि। कोई विचार? मेरे पास पहले से ही मेरी सभी तिथियों के साथ एक सूची है और सूचकांक सभी के साथ समान है, कोई अन्य फल प्रकट या गायब नहीं होता है।
यह कुछ ऐसा दिख सकता है
Def Alltogether():
Alltogether = []
x = HistoricalDates
For _ in Historicaldates :
k = getPrice....
और फिर मैं ब्लॉक कर देता हूँ...
मुझे अंत में कुछ पसंद है
print Alltogether
[out]
apple 10 40 60 20 ...
pear 20 20 20 20 ...
orange 12 13 14 29 ...
banana 23 14 41 54 ...
etc...
मैं पांडा डेटाफ्रेम का उपयोग कर रहा हूं।
आपका बहुत बहुत धन्यवाद!
2 जवाब
यह संभवत: उस प्रारूप को बदलकर सुव्यवस्थित किया जा सकता है जिसमें आप अपना डेटा प्राप्त करते हैं, लेकिन यहां एक उदाहरण दिया गया है जो आपको अपने रास्ते पर ले जाना चाहिए। मैं पूरी तरह से ज़िप दृष्टिकोण को छोड़ रहा हूं और इसे पंडों के अधिक तरीके से कर रहा हूं। परीक्षण के लिए मैंने उपज के एक निश्चित सेट के लिए यादृच्छिक मूल्य वापस करने के लिए एक डमी फ़ंक्शन बनाया:
import pandas as pd
def getPrice(date):
return pd.Series(np.random.randn(5), index=['apple', 'pear', 'orange', 'nanner', 'etc...'])
और फिर हम इसमें कुछ तिथियों के साथ एक पांडा डेटाफ्रेम बना सकते हैं:
df = pd.DataFrame( pd.date_range('1/1/2017', periods=3, freq='D') )
df.columns=['MyDate'] # name the date column
यह हमें 3 तिथियों के साथ एक साधारण df देता है:
MyDate
0 2017-01-01
1 2017-01-02
2 2017-01-03
पंक्तियों पर पुनरावृति करते समय किसी प्रकार के लागू फ़ंक्शन की तुलना में थोड़ा कम मुहावरेदार है, मुझे लगता है कि यह बहुत पठनीय और समझने में आसान है, बस तारीखों पर पुनरावृति करना, मूल्य प्राप्त करना, फिर उन्हें एक नए डेटाफ़्रेम में धकेलना और कॉलम को समान नाम देना तारीख। आपके प्रश्न को देखते हुए, मुझे संदेह है कि यह आपका वांछित आउटपुट है।
outputDF = pd.DataFrame() ## dump results into this df
for index, row in df.iterrows(): #iterate through every row of the date df
outputDF[row.MyDate] = getPrice(row.MyDate) #shove values into output
जो हमें इस तरह एक सुंदर df देता है:
2017-01-01 2017-01-02 2017-01-03
apple 0.150646 0.209668 0.398204
pear 0.131142 0.046473 -0.261545
orange 0.822508 0.456384 -0.774957
nanner -0.996102 -0.260049 -0.558503
etc... 0.622459 -0.173556 -0.681957
उन स्थितियों को संभालने के बारे में आपकी टिप्पणी के अनुसार जहां तिथि अमान्य है, इसे संभालने के कुछ तरीके हैं। यदि getPrice()
फ़ंक्शन खराब दिनांक पास करते समय कोई त्रुटि उत्पन्न करता है, तो आप try/except
का उपयोग कर सकते हैं:
try:
getPrice(date)
except:
# do something else... return nulls maybe?
यदि खराब तिथियां एक त्रुटि नहीं फेंकती हैं, लेकिन इसके बजाय वे नल या एक खाली सूची लौटाती हैं, तो बस getPrice()
पर कॉल करने के बाद उस स्थिति की जांच करें, लेकिन इसे डेटाफ्रेम में डालने से पहले।
क्या आपको इससे समस्या है? सूचियों की सूची को zip() में पास करने के लिए बस '*' का उपयोग करें। यहाँ एक उदाहरण:
L1=['L1-i1','L1-i2', 'L1-i3', 'L1-i4']
L2=['L2-i1','L2-i2', 'L2-i3', 'L2-i4']
L3=['L3-i1','L3-i2', 'L3-i3', 'L3-i4']
Lalltogether = [L1, L2, L3]
# in Python 3 you should use list() for zip():
print( list(zip( *Lalltogether )) )
print( list(zip( L1, L2, L3 )) )
देता है:
[('L1-i1', 'L2-i1', 'L3-i1'), ('L1-i2', 'L2-i2', 'L3-i2'), ('L1-i3', 'L2-i3', 'L3-i3'), ('L1-i4', 'L2-i4', 'L3-i4')]
'*' के बारे में अधिक जानकारी के लिए देखें पायथन - सूची को फ़ंक्शन पैरामीटर के रूप में उपयोग करें
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।