আমার মতে, গৃহীত উত্তরটি বিভ্রান্তিকর, যেহেতু এটি কেবলমাত্র হারিয়ে যাওয়া মান সহ একটি ডেটা ফ্রেম ব্যবহার করে। আমিও মত শব্দ না অবস্থান-ভিত্তিক জন্য .iloc
এবং পরিবর্তে, পছন্দ করা অবস্থান পূর্ণসংখ্যা যেমন আরো অনেক কিছু বর্ণনামূলক এবং ঠিক কি .iloc
জন্য দাঁড়িয়েছে। মূল শব্দটি INTEGER - এর .iloc
দরকার INTEGERS।
আরও জন্য সাবসেট নির্বাচনের উপর আমার অত্যন্ত বিস্তারিত ব্লগ সিরিজ দেখুন
.ix হ্রাস ও অস্পষ্ট এবং কখনও ব্যবহার করা উচিত নয়
.ix
অবহেলিত কারণ আমরা কেবল .loc
এবং এর মধ্যে পার্থক্যগুলিতে মনোনিবেশ করব .iloc
।
পার্থক্য সম্পর্কে কথা বলার আগে, এটি বোঝা গুরুত্বপূর্ণ যে ডেটাফ্রেমে লেবেল রয়েছে যা প্রতিটি কলাম এবং প্রতিটি সূচি সনাক্ত করতে সহায়তা করে। আসুন একটি নমুনা ডেটা ফ্রেমটি একবার দেখুন:
df = pd.DataFrame({'age':[30, 2, 12, 4, 32, 33, 69],
'color':['blue', 'green', 'red', 'white', 'gray', 'black', 'red'],
'food':['Steak', 'Lamb', 'Mango', 'Apple', 'Cheese', 'Melon', 'Beans'],
'height':[165, 70, 120, 80, 180, 172, 150],
'score':[4.6, 8.3, 9.0, 3.3, 1.8, 9.5, 2.2],
'state':['NY', 'TX', 'FL', 'AL', 'AK', 'TX', 'TX']
},
index=['Jane', 'Nick', 'Aaron', 'Penelope', 'Dean', 'Christina', 'Cornelia'])
গা bold় সমস্ত শব্দ লেবেল। লেবেল, age
, color
, food
, height
, score
এবং state
জন্য ব্যবহার করা হয় কলাম । অন্যান্য লেবেল, Jane
, Nick
, Aaron
, Penelope
, Dean
, Christina
, Cornelia
জন্য ব্যবহার করা হয় সূচক ।
ডেটাফ্রেমে নির্দিষ্ট সারি নির্বাচন করার প্রাথমিক উপায়গুলি হ'ল সূচক .loc
এবং .iloc
সূচকগুলির সাথে। এই সূচকগুলির প্রত্যেকটি একই সাথে কলামগুলি নির্বাচন করতে ব্যবহার করা যেতে পারে তবে আপাতত সারিগুলিতে ফোকাস করা আরও সহজ। এছাড়াও, সূচকগুলির প্রত্যেকটি বন্ধনীগুলির একটি সেট ব্যবহার করে যা তাদের নির্বাচনগুলি করার জন্য অবিলম্বে তাদের নামটি অনুসরণ করে follow
.loc কেবল লেবেল দ্বারা ডেটা নির্বাচন করে
আমরা প্রথমে .loc
সূচক সম্পর্কে কথা বলব যা কেবল সূচক বা কলাম লেবেলের দ্বারা ডেটা নির্বাচন করে। আমাদের নমুনা ডেটাফ্রেমে আমরা সূচকের মান হিসাবে অর্থবহ নাম সরবরাহ করেছি। অনেক ডেটা ফ্রেমের কোনও অর্থপূর্ণ নাম থাকবে না এবং পরিবর্তে 0 থেকে এন -1 পর্যন্ত কেবল পূর্ণসংখ্যায় ডিফল্ট হবে, যেখানে ডেটা ফ্রেমের দৈর্ঘ্য n n
তিনটি পৃথক ইনপুট রয়েছে যা আপনি ব্যবহার করতে পারেন .loc
- একটি স্ট্রিং
- স্ট্রিংগুলির একটি তালিকা
- স্ট্রিং সূচনা এবং স্টপ মান হিসাবে স্ট্রিং নোটেশন
স্ট্রিং সহ .loc সহ একটি একক সারি নির্বাচন করা হচ্ছে
একক সারির ডেটা নির্বাচন করতে, নীচের বন্ধনীগুলির মধ্যে সূচী লেবেলটি রাখুন .loc
।
df.loc['Penelope']
এটি সিরিজ হিসাবে ডেটা সারি ফেরত দেয়
age 4
color white
food Apple
height 80
score 3.3
state AL
Name: Penelope, dtype: object
স্ট্রিংগুলির তালিকা সহ .loc সহ একাধিক সারি নির্বাচন করা
df.loc[['Cornelia', 'Jane', 'Dean']]
এটি তালিকায় নির্দিষ্ট ক্রমে সারিগুলির সাথে একটি ডেটাফ্রেম প্রদান করে:
স্লাইস নোটেশন সহ .loc সহ একাধিক সারি নির্বাচন করা
স্লাইস নোটেশনটি একটি স্টার্ট, স্টপ এবং ধাপের মানগুলির দ্বারা সংজ্ঞায়িত করা হয়। লেবেলে টুকরো টুকরো করার সময়, পান্ডাসগুলি রিটার্নের স্টপ মান অন্তর্ভুক্ত করে। অন্তর্ভুক্ত হারুন থেকে ডিনের নিম্নলিখিত স্লাইসগুলি। এর ধাপের আকারটি সুস্পষ্টভাবে সংজ্ঞায়িত করা হয়নি তবে 1 এ ডিফল্ট হয়েছে।
df.loc['Aaron':'Dean']
জটিল টুকরোগুলি পাইথন তালিকার মতো একইভাবে নেওয়া যেতে পারে।
.iloc শুধুমাত্র পূর্ণসংখ্যার অবস্থান দ্বারা ডেটা নির্বাচন করে
আসুন এখন ঘুরে আসা যাক .iloc
। ডেটা ফ্রেমের প্রতিটি সারি এবং কলামের ডেটা-এর একটি পূর্ণসংখ্যা অবস্থান থাকে যা এটি সংজ্ঞায়িত করে। এটি আউটপুটে চাক্ষুষভাবে প্রদর্শিত লেবেলের পাশাপাশি রয়েছে । পূর্ণসংখ্যার অবস্থানটি কেবল শীর্ষে / বামে 0 থেকে শুরু করে সারি / কলামগুলির সংখ্যা।
তিনটি পৃথক ইনপুট রয়েছে যা আপনি ব্যবহার করতে পারেন .iloc
- একটি পূর্ণসংখ্যা
- পূর্ণসংখ্যার একটি তালিকা
- শুরু এবং থামার মান হিসাবে পূর্ণসংখ্যা ব্যবহার করে স্লাইস নোটেশন
একটি পূর্ণসংখ্যার সাথে .iloc সহ একটি একক সারি নির্বাচন করা
df.iloc[4]
এটি সিরিজ হিসাবে 5 তম সারিতে (পূর্ণসংখ্যার অবস্থান 4) প্রদান করে
age 32
color gray
food Cheese
height 180
score 1.8
state AK
Name: Dean, dtype: object
পূর্ণসংখ্যার একটি তালিকা সহ .iloc সহ একাধিক সারি নির্বাচন করা
df.iloc[[2, -2]]
এটি তৃতীয় এবং দ্বিতীয় সারিতে দ্বিতীয়টির ডেটাফ্রেম প্রদান করে:
স্লাইস নোটেশন সহ .iloc সহ একাধিক সারি নির্বাচন করা
df.iloc[:5:3]
.Loc এবং .iloc সহ সারি এবং কলামগুলির যুগপত নির্বাচন
উভয়ের একটি দুর্দান্ত দক্ষতা .loc/.iloc
হ'ল সারি এবং কলাম দুটি একই সাথে নির্বাচন করার দক্ষতা। উপরের উদাহরণগুলিতে, প্রতিটি নির্বাচন থেকে সমস্ত কলাম ফিরিয়ে দেওয়া হয়েছিল। সারিগুলির জন্য আমরা একই ধরণের ইনপুট সহ কলামগুলি চয়ন করতে পারি। আমাদের কেবল কমা দিয়ে সারি এবং কলাম নির্বাচন পৃথক করতে হবে ।
উদাহরণস্বরূপ, আমরা সারি সারি জেন, এবং ডিনকে কেবল কলামগুলির উচ্চতা, স্কোর এবং এর মতো অবস্থা নির্বাচন করতে পারি:
df.loc[['Jane', 'Dean'], 'height':]
এটি কলামগুলির জন্য সারিগুলির জন্য লেবেলগুলির তালিকা এবং স্লাইস স্বরলিপি ব্যবহার করে
আমরা .iloc
কেবলমাত্র পূর্ণসংখ্যা ব্যবহার করে একইভাবে কাজ করতে পারি ।
df.iloc[[1,4], 2]
Nick Lamb
Dean Cheese
Name: food, dtype: object
লেবেল এবং পূর্ণসংখ্যার অবস্থান সহ একযোগে নির্বাচন
.ix
লেবেল এবং পূর্ণসংখ্যার অবস্থানের সাথে একযোগে নির্বাচন করতে ব্যবহৃত হয়েছিল যা দরকারী তবে বিভ্রান্তিকর এবং দ্বিধাগ্রস্ত ছিল এবং ধন্যবাদ যে এটি হ্রাস পেয়েছে। আপনার লেবেল এবং পূর্ণসংখ্যার অবস্থানগুলির মিশ্রণ সহ একটি নির্বাচন করা প্রয়োজন সে ক্ষেত্রে আপনার নির্বাচনের লেবেল বা পূর্ণসংখ্যার উভয় স্থানই তৈরি করতে হবে।
উদাহরণস্বরূপ, যদি আমরা সারিগুলি নির্বাচন করতে চাই Nick
এবং Cornelia
2 এবং 4 কলামের পাশাপাশি, আমরা .loc
নিম্নলিখিতগুলির সাথে পূর্ণসংখ্যাকে লেবেলে রূপান্তর করে ব্যবহার করতে পারি :
col_names = df.columns[[2, 4]]
df.loc[['Nick', 'Cornelia'], col_names]
অথবা বিকল্পভাবে, সূচীকরণের get_loc
পদ্ধতি অনুসারে সূচক লেবেলগুলিকে পূর্ণসংখ্যায় রূপান্তর করুন ।
labels = ['Nick', 'Cornelia']
index_ints = [df.index.get_loc(label) for label in labels]
df.iloc[index_ints, [2, 4]]
বুলিয়ান নির্বাচন
.Loc সূচক এছাড়াও বুলিয়ান নির্বাচন করতে পারে। উদাহরণস্বরূপ, যদি আমরা 30 বছরের বেশি বয়সী সমস্ত সারিগুলি সন্ধান করতে আগ্রহী এবং কেবল নীচে food
এবং score
কলামগুলিতে ফিরে যেতে পারি:
df.loc[df['age'] > 30, ['food', 'score']]
আপনি এটি দিয়ে প্রতিলিপি .iloc
করতে পারেন তবে আপনি এটি বুলিয়ান সিরিজটি পাস করতে পারবেন না। আপনাকে অবশ্যই বুলিয়ান সিরিজটিকে এই জাতীয় একটি নমীর অ্যারে রূপান্তর করতে হবে:
df.iloc[(df['age'] > 30).values, [2, 4]]
সমস্ত সারি নির্বাচন করা হচ্ছে
.loc/.iloc
কেবল কলাম নির্বাচনের জন্য এটি ব্যবহার করা সম্ভব । আপনি এর মতো কোলন ব্যবহার করে সমস্ত সারি নির্বাচন করতে পারেন:
df.loc[:, 'color':'score':2]
ইনডেক্সিং অপারেটর, []
সারি এবং কলামগুলি নির্বাচন করতে পারে তবে একই সাথে নয়।
বেশিরভাগ লোক ডেটা ফ্রেম ইনডেক্সিং অপারেটরের প্রাথমিক উদ্দেশ্য সম্পর্কে পরিচিত, যা কলামগুলি নির্বাচন করা। একটি স্ট্রিং সিরিজ হিসাবে একটি একক কলাম নির্বাচন করে এবং স্ট্রিংয়ের তালিকা একাধিক কলামকে ডেটা ফ্রেম হিসাবে নির্বাচন করে।
df['food']
Jane Steak
Nick Lamb
Aaron Mango
Penelope Apple
Dean Cheese
Christina Melon
Cornelia Beans
Name: food, dtype: object
একটি তালিকা ব্যবহার করে একাধিক কলাম নির্বাচন করে
df[['food', 'score']]
লোকেরা যা সম্পর্কে কম পরিচিত, তা হ'ল, যখন স্লাইস নোটেশন ব্যবহৃত হয়, তারপরে সারি লেবেল বা পূর্ণসংখ্যার অবস্থান দ্বারা নির্বাচন হয়। এটি খুব বিভ্রান্তিকর এবং এমন কিছু যা আমি প্রায় কখনও ব্যবহার করি না তবে এটি কাজ করে।
df['Penelope':'Christina'] # slice rows by label
df[2:6:2] # slice rows by integer location
এর explicitness .loc/.iloc
নির্বাচন সারি জন্য অত্যন্ত পছন্দ করা হয়। ইনডেক্সিং অপারেটর একাই সারি এবং কলামগুলি নির্বাচন করতে অক্ষম।
df[3:5, 'color']
TypeError: unhashable type: 'slice'