কোনও পান্ডাস ডেটাফ্রেমের ডেটার শেষ সারিটি কীভাবে মুছবেন


119

আমি মনে করি এটি সহজ হওয়া উচিত, তবে আমি কয়েকটি ধারণার চেষ্টা করেছি এবং তাদের কোনওটিই কাজ করে নি:

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

আমি নেতিবাচক সূচকগুলি ব্যবহার করার চেষ্টা করেছি তবে এটি ত্রুটিও ঘটায়। আমি এখনও বেসিক কিছু ভুল বুঝতে হবে।


30
DF = DF[:-1]?
U2EF1

@ U2EF1 এটি পুরো ডেটাসেটটি অনুলিপি করে, তাই না? বিশাল ডেটা পরিচালনা করার সময় এটি একটি সমস্যা হতে পারে।
ম্যানুয়েলস্কিনিড 3 ই

উত্তর:


176

সর্বশেষ এন সারি বাদ দিতে:

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

একই শিরা দ্বারা, আপনি প্রথম এন সারি বাদ দিতে পারেন:

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

শেষ কলামটি ড্রপ করতে আপনি df.DP (df.colالms [-1], অক্ষ = 1, ইনপ্লেস = ট্রু) ব্যবহার করতে পারেন, অথবা আপনি যদি কলামটির নাম জানেন তবে আপনি ডিএফ.ড্রপ ব্যবহার করতে পারেন (কলাম = ['কল_নাম) '], ইনপ্লেস = সত্য) - আপনি যদি এটিটি জায়গায় সঞ্চালিত না করতে চান তবে এটি একটি নতুন ভেরিয়েবলের জন্য বরাদ্দ করুন এবং সেই যুক্তিটি সরিয়ে দিন।
শন শ্রেরিয়ার

93
DF[:-n]

যেখানে n হ'ল সারিগুলির শেষ সংখ্যা।

শেষ সারিটি নামাতে:

DF = DF[:-1]

সরলতার জন্য উত্সাহিত
শেঠ

60

যেহেতু পাইথন সূচক পজিশনিং 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]


4
নোট করুন যে dfrm.index ব্যবহার করে ড্রপ করার সময়, শেষ সারিটির সূচকটি অনন্য হওয়া উচিত, অন্যথায় index সূচকের সমস্ত সারি বাদ দেওয়া হয়।
ফ্রান্সিসকোড

আমি কি সঠিকভাবে বুঝতে পারি যে, ড্রপ (অন্তর্ভুক্ত = সত্য) ব্যবহার করে আপনি বিদ্যমান ডিএফটি সংশোধন করেছেন, ডিএফ ব্যবহার করার সময় [: - 1] আপনি ডেটার একটি ভিউ পাবেন যা পরে সেটিংওয়াইথকপি ওয়ার্নিংয়ের দিকে পরিচালিত করতে পারে?
ফিলিপ

29

অবাক করা কেউই এটিকে উপরে আনেনি:

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

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

1000 সারিগুলির ডেটাফ্রেমে একটি গতি পরীক্ষা চালিয়ে যাওয়া দেখায় যে স্লাইসিং এবং 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()মেমরিতে প্রকৃতপক্ষে উপস্থাপনা পরিবর্তন হয় (হয় অন্তর্নিহিত পরিবর্তন, বা সম্পূর্ণ নতুন ডেটাফ্রেম তৈরি করে)। আমি ডক্সে এটি সন্ধান করিনি, দয়া করে কেউ করুন। (যদি পার্থক্য হয়: পারফ ডিফের জন্য ভাল ব্যাখ্যা, এবং তাদের মধ্যে একটি সাবধানে বেছে নেওয়া দরকার) /
ডাঃ জান-ফিলিপ গেহর্ককে

@ ডাঃ জ্যান-ফিলিপ জিহরস্কে হেড head, tailএবং dropসকলেই একটি মতামত ফিরিয়ে দিয়েছেন, যদিও এটি সত্য যে dropআপনাকে আসল ডেটাফ্রেমের স্থানটি পরিবর্তন করার বিকল্প দেয়।
দ্য জিরাফিশ

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

skipfooter: int, default 0

এড়াতে ফাইলের নীচে লাইনগুলির সংখ্যা

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

পরিসংখ্যানের আউটপুট 3

       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 অপারেশনের আগের মতো একই ধরণের মাল্টি-ইনডেক্স রাখে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.