मुझे डेटाफ्रेम में मूल्यों को बदलने में समस्या आ रही है। मैं हल करने की आवश्यकता के बारे में भी सलाह देना चाहता हूं और हल करने के लिए पांडा का उपयोग करने का उचित तरीका। मैं दोनों पर मदद की सराहना करता हूं। मेरे पास एक फ़ाइल है जिसमें वक्ताओं को ऑडियो फ़ाइलों की मिलान करने की जानकारी है। फ़ाइल कुछ ऐसा दिखती है:पांडा डेटाफ्रेम में मूल्य बदलना काम करता है
wave_path spk_name spk_example# score mark comments isUsed
190 122_65_02.04.51.800.wav idoD idoD 88 NaN NaN False
191 121_110_20.17.27.400.wav idoD idoD 87 NaN NaN False
192 121_111_00.34.57.300.wav idoD idoD 87 NaN NaN False
193 103_31_18.59.12.800.wav idoD idoD_0 99 HIT VP False
194 131_101_02.08.06.500.wav idoD idoD_0 96 HIT VP False
मुझे क्या करने की ज़रूरत है, यह एक परिष्कृत गिनती है। मुझे स्पीकर द्वारा परिणामों को समूहित करने की आवश्यकता है, और प्रत्येक स्पीकर के लिए कुछ गणना की गणना करें। मैं फिर स्पीकर के साथ आगे बढ़ता हूं जिसने मेरे लिए सबसे अच्छी गणना की है, लेकिन आगे बढ़ने से पहले मुझे उपयोग की जाने वाली गणना के लिए उपयोग की जाने वाली सभी फाइलों को चिह्नित करने की आवश्यकता है, यानी प्रत्येक पंक्ति के लिए isUsed मान बदलना जिसमें वे प्रकट होते हैं (फाइलें दिखाई दे सकती हैं एक से अधिक) सच करने के लिए। फिर मैं एक और पुनरावृत्ति करता हूं। प्रत्येक स्पीकर के लिए गणना करें, उपयोग की गई फ़ाइलों को चिह्नित करें और तब तक जब तक कोई और स्पीकर गणना न करें।
मैंने पांडों का उपयोग करके उस प्रक्रिया को कार्यान्वित करने के बारे में बहुत कुछ सोचा (यह नियमित पायथन में लागू करना काफी आसान है, लेकिन इसमें बहुत लूपिंग और डेटा संरचना होगी जो मेरा अनुमान प्रक्रिया को धीमा कर देगा, और मैं भी मैं पांडा क्षमताओं को अधिक गहराई से सीखने के लिए इस प्रक्रिया का उपयोग कर रहा हूं)
मैं निम्नलिखित समाधान के साथ बाहर आया। तैयारी के चरणों के रूप में, मैं स्पीकर नाम से समूहबद्ध करूंगा और set_index विधि द्वारा फ़ाइल नाम को इंडेक्स के रूप में सेट करूँगा। मैं फिर groupbyObj पर फिर से शुरू करूंगा और गणना फ़ंक्शन लागू करूंगा, जो चयनित स्पीकर और फ़ाइलों को उपयोग के रूप में चिह्नित करने के लिए वापस कर देगा।
फिर मैं फ़ाइलों पर पुन: सक्रिय हो जाऊंगा और उन्हें इस्तेमाल के रूप में चिह्नित करूँगा (यह तेज़ और सरल होगा क्योंकि मैं उन्हें पहले से इंडेक्स के रूप में सेट करता हूं), और जब तक मैं गणना समाप्त नहीं करता तब तक।
सबसे पहले, मुझे इस समाधान के बारे में निश्चित नहीं है, इसलिए मुझे अपने विचारों को बताने में संकोच न करें। अब, मैं इस को लागू करने की कोशिश की है, और मुसीबत में मिल गया:
सबसे पहले मैं फ़ाइल नाम द्वारा अनुक्रमित है, यहाँ कोई समस्या नहीं:
In [53]:
marked_results['isUsed'] = False
ind_res = marked_results.set_index('wave_path')
ind_res.head()
Out[53]:
spk_name spk_example# score mark comments isUsed
wave_path
103_31_18.59.12.800.wav idoD idoD 99 HIT VP False
131_101_02.08.06.500.wav idoD idoD 99 HIT VP False
144_35_22.46.38.700.wav idoD idoD 96 HIT VP False
41_09_17.10.11.700.wav idoD idoD 93 HIT TEST False
122_188_03.19.20.400.wav idoD idoD 93 NaN NaN False
तब मैं कोई फ़ाइल चुनें और जाँच की है कि मैं प्रविष्टियों प्रासंगिक उस फ़ाइल में:
In [54]:
example_file = ind_res.index[0];
ind_res.ix[example_file]
Out[54]:
spk_name spk_example# score mark comments isUsed
wave_path
103_31_18.59.12.800.wav idoD idoD 99 HIT VP False
103_31_18.59.12.800.wav idoD idoD_0 99 HIT VP False
103_31_18.59.12.800.wav idoD idoD_1 97 HIT VP False
103_31_18.59.12.800.wav idoD idoD_2 95 HIT VP False
अब यहां भी समस्याएं हैं। तब मैं सही पर उस फ़ाइल के लिए isUsed मूल्य बदलने की कोशिश की, और कहा कि जहां मैं इस समस्या मिला:
In [56]:
ind_res.ix[example_file]['isUsed'] = True
ind_res.ix[example_file].isUsed = True
ind_res.ix[example_file]
Out[56]:
spk_name spk_example# score mark comments isUsed
wave_path
103_31_18.59.12.800.wav idoD idoD 99 HIT VP False
103_31_18.59.12.800.wav idoD idoD_0 99 HIT VP False
103_31_18.59.12.800.wav idoD idoD_1 97 HIT VP False
103_31_18.59.12.800.wav idoD idoD_2 95 HIT VP False
तो, आप समस्या को देखते हैं। कुछ भी नहीं बदला। मैं क्या गलत कर रहा हूं? ऊपर वर्णित समस्या को पांडा का उपयोग करके हल किया जाना चाहिए?
और यह भी: 1. मैं समूह समूह द्वारा किसी विशिष्ट समूह से कैसे संपर्क कर सकता हूं? बीसीजेड मैंने सोचा था कि फाइलों को अनुक्रमित, फ़ाइल द्वारा समूहित करने के बजाय, और उस समूहबी ओबीजे का उपयोग करके इसकी सभी घटनाओं में एक बदलते फ़ंक्शन को लागू करने के बजाय। लेकिन मुझे किसी विशिष्ट समूह से संपर्क करने और समूह के नाम को पैरामीटर के रूप में पारित करने और सभी समूहों पर कॉल करने का कोई तरीका नहीं मिला और फिर उनमें से केवल एक पर कार्य करना मुझे "सही" नहीं लग रहा था। एक दृश्य या एक प्रति:
मुझे आशा है कि यह लंबे समय के लिए नहीं है ... :)
आप एक प्रति, '' .ix [example_file, 'isUsed'] '' देख संशोधित कर रहे हैं यहाँ कुछ करना चाहता हूँ: http: // pandas.pydata.org/pandas-docs/dev/indexing.html#returning-a-view-versus-a-copy – Jeff