पांडा डेटाफ्रेम की अंतिम पंक्ति को कैसे हटाएं


104

मुझे लगता है कि यह सरल होना चाहिए, लेकिन मैंने कुछ विचारों की कोशिश की और उनमें से कोई भी काम नहीं किया:

last_row = len(DF)
DF = DF.drop(DF.index[last_row])  #<-- fail!

मैंने नकारात्मक सूचकांकों का उपयोग करने की कोशिश की लेकिन यह भी त्रुटियों का कारण बनता है। मुझे अभी भी कुछ बुनियादी गलतफहमी होनी चाहिए।


27
DF = DF[:-1]?
U2EF1

@ U2EF1 यह संपूर्ण डेटासेट की प्रतिलिपि बनाता है, यह नहीं है? विशाल डेटा को संभालते समय यह एक मुद्दा हो सकता है।
मैनुएल श्नाइड 3r

जवाबों:


163

अंतिम n पंक्तियों को छोड़ने के लिए:

df.drop(df.tail(n).index,inplace=True) # drop last n rows

उसी नस से, आप पहली n पंक्तियों को छोड़ सकते हैं:

df.drop(df.head(n).index,inplace=True) # drop first n rows

अंतिम कॉलम को छोड़ने के लिए आप df.drop (df.columns [-1], अक्ष = 1, inplace = True) का उपयोग कर सकते हैं या, यदि आप उस स्तंभ का नाम जानते हैं जो आप df.drop (कॉलम = ['col_name) का उपयोग कर सकते हैं '], inplace = true) - यदि आप नहीं चाहते हैं कि इसे जगह पर किया जाए, तो इसे एक नए वेरिएबल में असाइन करें और उस तर्क को हटा दें।
शॉन श्रेयर

78
DF[:-n]

जहां n ड्रॉप करने के लिए पंक्तियों की अंतिम संख्या है।

अंतिम पंक्ति छोड़ने के लिए:

DF = DF[:-1]

58

चूंकि पायथन में इंडेक्स पोजिशनिंग 0-आधारित है, इसलिए वास्तव indexमें इसके स्थान पर एक तत्व नहीं होगा len(DF)। आपको इसकी आवश्यकता है last_row = len(DF) - 1:

In [49]: dfrm
Out[49]: 
          A         B         C
0  0.120064  0.785538  0.465853
1  0.431655  0.436866  0.640136
2  0.445904  0.311565  0.934073
3  0.981609  0.695210  0.911697
4  0.008632  0.629269  0.226454
5  0.577577  0.467475  0.510031
6  0.580909  0.232846  0.271254
7  0.696596  0.362825  0.556433
8  0.738912  0.932779  0.029723
9  0.834706  0.002989  0.333436

[10 rows x 3 columns]

In [50]: dfrm.drop(dfrm.index[len(dfrm)-1])
Out[50]: 
          A         B         C
0  0.120064  0.785538  0.465853
1  0.431655  0.436866  0.640136
2  0.445904  0.311565  0.934073
3  0.981609  0.695210  0.911697
4  0.008632  0.629269  0.226454
5  0.577577  0.467475  0.510031
6  0.580909  0.232846  0.271254
7  0.696596  0.362825  0.556433
8  0.738912  0.932779  0.029723

[9 rows x 3 columns]

हालाँकि, यह सिर्फ लिखने के लिए बहुत सरल है DF[:-1]


2
ध्यान दें कि dfrm.index का उपयोग करते समय अंतिम पंक्ति का सूचकांक अद्वितीय होना चाहिए, अन्यथा उस सूचकांक वाली सभी पंक्तियों को छोड़ दिया जाता है।
फ्रांसिस्को 13

क्या मैं सही ढंग से समझता हूं, कि ड्रॉप (inplace = true) का उपयोग करते हुए आप मौजूदा df को मोडिफाई करते हैं, जबकि df [: - 1] का उपयोग करने से आपको डेटा का दृश्य मिलता है, जो बाद में SettingWithCopyWarning को जन्म दे सकता है?
फिलिप 19

21

हैरानी की बात यह है कि कोई भी इसे नहीं लाया:

# To remove last n rows
df.head(-n)

# To remove first n rows
df.tail(-n)

1000 पंक्तियाँ शो की एक DataFrame पर गति परीक्षण चल रहा है कि टुकड़ा करने की क्रिया और head/ tailका उपयोग करने से ~ 6 गुना तेजी से कर रहे हैं drop:

>>> %timeit df[:-1]
125 µs ± 132 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

>>> %timeit df.head(-1)
129 µs ± 1.18 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

>>> %timeit df.drop(df.tail(1).index)
751 µs ± 20.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

हो सकता है कि दोनों के बीच का अंतर दृष्टिकोण है कि head()और tail()एक बनाने के दृश्य जबकि drop()वास्तव में स्मृति में प्रतिनिधित्व बदल जाता है (या तो inplace संशोधन, या पूरी तरह से नया dataframe बनाता है)। मैंने इसे डॉक्स में नहीं देखा, कृपया कोई ऐसा करे। (यदि यह अंतर है: पूर्ण अंतर के लिए अच्छी व्याख्या, और किसी को सावधानी से उनके बीच चयन करने की आवश्यकता है) /
डॉ। जन-फिलिप गेर्के

@ Dr.Jan-PhilipGehrcke हेड head, tailऔर dropसभी एक दृश्य लौटाते हैं, हालांकि यह सच है कि dropआपको मूल डेटाफ़्रेम इनलाइन को संशोधित करने का विकल्प देता है।
theGirrafish

5
stats = pd.read_csv("C:\\py\\programs\\second pandas\\ex.csv")

आंकड़ों का उत्पादन:

       A            B          C
0   0.120064    0.785538    0.465853
1   0.431655    0.436866    0.640136
2   0.445904    0.311565    0.934073
3   0.981609    0.695210    0.911697
4   0.008632    0.629269    0.226454
5   0.577577    0.467475    0.510031
6   0.580909    0.232846    0.271254
7   0.696596    0.362825    0.556433
8   0.738912    0.932779    0.029723
9   0.834706    0.002989    0.333436

महज प्रयोग करें skipfooter=1

स्किपफूटर: इंट, डिफॉल्ट 0

स्किप करने के लिए फ़ाइल के नीचे लाइनों की संख्या

stats_2 = pd.read_csv("C:\\py\\programs\\second pandas\\ex.csv", skipfooter=1, engine='python')

आँकड़े २ का उत्पादन

       A          B            C
0   0.120064    0.785538    0.465853
1   0.431655    0.436866    0.640136
2   0.445904    0.311565    0.934073
3   0.981609    0.695210    0.911697
4   0.008632    0.629269    0.226454
5   0.577577    0.467475    0.510031
6   0.580909    0.232846    0.271254
7   0.696596    0.362825    0.556433
8   0.738912    0.932779    0.029723

1

ड्रॉप एक नया सरणी देता है, इसीलिए इसे ओग पोस्ट में डाला जाता है; कुछ कॉलम हेडर का नाम बदलने के लिए मुझे एक समान आवश्यकता थी और एक गलत तरीके से बनाई गई सीएसवी फ़ाइल को डेटाफ़्रेम में परिवर्तित करने के कारण कुछ पंक्तियों को हटा दिया गया, इसलिए इस पोस्ट को पढ़ने के बाद मैंने इसका उपयोग किया:

newList = pd.DataFrame(newList)
newList.columns = ['Area', 'Price']
print(newList)
# newList = newList.drop(0)
# newList = newList.drop(len(newList))
newList = newList[1:-1]
print(newList)

और यह बहुत अच्छा काम किया, जैसा कि आप ऊपर बताई गई दो लाइनों के साथ देख सकते हैं, जैसे मैंने ड्रॉप की कोशिश की थी। () विधि और यह काम करता है, लेकिन [n: -n] का उपयोग करने के रूप में कूल और पठनीय नहीं है, आशा है कि किसी की मदद करता है, धन्यवाद।


0

अधिक जटिल डेटाफ़्रेम के लिए जिनके पास एक मल्टी-इंडेक्स है ("स्टॉक" और "दिनांक") और प्रत्येक प्रत्येक स्टॉक के लिए अंतिम पंक्ति को हटाना चाहता है न कि केवल अंतिम स्टॉक की अंतिम पंक्ति, फिर समाधान पढ़ता है:

# To remove last n rows
df = df.groupby(level='Stock').apply(lambda x: x.head(-1)).reset_index(0, drop=True)

# To remove first n rows
df = df.groupby(level='Stock').apply(lambda x: x.tail(-1)).reset_index(0, drop=True)

जैसा कि groupby()मल्टी-इंडेक्स में एक अतिरिक्त स्तर जोड़ रहा है, हम इसे अंत में उपयोग करके छोड़ देते हैं reset_index()। परिणामी df ऑपरेशन से पहले उसी तरह के मल्टी-इंडेक्स रखता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.