iloc
पंडों में अलग-अलग अनुक्रमण विधियों से मैं इतना भ्रमित हूं ।
मान लीजिए कि मैं 1-डी डेटाफ़्रेम को 2-डी डेटाफ़्रेम में बदलने की कोशिश कर रहा हूं। पहले मेरे पास निम्नलिखित 1-डी डेटाफ्रेम है
a_array = [1,2,3,4,5,6,7,8]
a_df = pd.DataFrame(a_array).T
और मैं उस 2-डी डेटाफ्रेम में आकार के साथ परिवर्तित करने जा रहा हूं 2x4
। मैं निम्नलिखित के रूप में 2-डी डेटाफ़्रेम निर्धारित करके शुरू करता हूं:
b_df = pd.DataFrame(columns=range(4),index=range(2))
तब मैं मदद मुझे परिवर्तित करने के लिए लूप का उपयोग a_df
(1-घ) करने के लिए b_df
निम्न कोड के साथ (2-घ)
for i in range(2):
b_df.iloc[i,:] = a_df.iloc[0,i*4:(i+1)*4]
यह केवल मुझे निम्नलिखित परिणाम देता है
0 1 2 3
0 1 2 3 4
1 NaN NaN NaN NaN
लेकिन जब मैं बदल b_df.iloc[i,:]
गया b_df.iloc[i][:]
। परिणाम निम्नलिखित की तरह सही है, जो मैं चाहता हूं
0 1 2 3
0 1 2 3 4
1 5 6 7 8
क्या कोई मुझे समझा सकता है कि क्या अंतर है .iloc[i,:]
और क्या .iloc[i][:]
है, और .iloc[i][:]
ऊपर मेरे उदाहरण में क्यों काम किया लेकिन नहीं.iloc[i,:]
b_df.iloc[1] = a_df.iloc[0, 4:8]
असाइन सूचकांक के साथ एक श्रृंखला[4, 5, 6, 7]
सूचकांक के साथ एक श्रृंखला के लिए[0, 1, 2, 3]
। ओवरलैप नहीं है इसलिएNaN
सभी तत्वों को सौंपा गया है। इस बिंदु तक यह मेरे लिए समझ में आता है। लेकिन आप की तरह मैं इस बात पर अस्पष्ट हूं किb_df.iloc[1][:] = ...
अलग-अलग व्यवहार क्यों करता है- वस्तुओं का निरीक्षण करनाb_df.iloc[1]
औरb_df.iloc[1][:]
सूचकांकों के बीच कोई अंतर नहीं बताता है। मेरा सबसे अच्छा अनुमान यह होगा कि एक कॉपी ([:]
) को सीधे असाइन करना पंडों द्वारा एक विशेष मामले के रूप में माना जाता है जो इसे असाइन करने वाले के सूचकांक को अनदेखा करता है और यह विसंगति पैदा करता है।