আইলোক, আইএক্স এবং লক কীভাবে আলাদা?


635

কেউ কীভাবে ব্যাখ্যা করতে পারে যে এই তিনটি টুকরো টুকরো করার পদ্ধতি কীভাবে আলাদা?
আমি দস্তাবেজগুলি দেখেছি এবং আমি এই উত্তরগুলি দেখেছি , তবে এখনও তিনটি কীভাবে আলাদা তা ব্যাখ্যা করতে আমার নিজেকে অক্ষম মনে হচ্ছে। আমার কাছে এগুলি বড় অংশে বিনিময়যোগ্য বলে মনে হচ্ছে, কারণ এগুলি কাটানোর নিম্ন স্তরে রয়েছে।

উদাহরণস্বরূপ, বলুন আমরা একটি এর প্রথম পাঁচটি সারি পেতে চাই DataFrame। এই তিনটি কীভাবে কাজ করে?

df.loc[:5]
df.ix[:5]
df.iloc[:5]

ব্যবহারের পার্থক্য পরিষ্কার হওয়ার ক্ষেত্রে কেউ তিনটি ক্ষেত্রে কী উপস্থাপন করতে পারেন?


7
খুবই গুরুত্বপূর্ণ SettingWithCopyWarning পরিস্থিতিতে উল্লেখ: stackoverflow.com/questions/20625582/... এবং stackoverflow.com/questions/23688307/...
পল

9
নোট করুন যে ix এখন অবচয়
ডেস্ক

উত্তর:


968

নোট: পান্ডাস সংস্করণ 0.20.0 এবং উপরোক্ত এ, ixহয় অবচিত এবং ব্যবহার locএবং ilocপরিবর্তে উত্সাহ দেওয়া হয়। আমি এই উত্তরের অংশগুলি রেখেছি ixযা পান্ডার পূর্ববর্তী সংস্করণগুলির ব্যবহারকারীদের জন্য একটি রেফারেন্স হিসাবে অক্ষত বর্ণনা করে । নীচে বিকল্পগুলি দেখিয়ে উদাহরণগুলি যুক্ত করা হয়েছে ix


প্রথমত, এখানে তিনটি পদ্ধতির পুনরুদ্ধার করা হল:

  • locসূচক থেকে নির্দিষ্ট লেবেলগুলির সাথে সারি (বা কলাম) পান।
  • ilocসূচকে নির্দিষ্ট অবস্থানে সারিগুলি (বা কলাম) পান (সুতরাং এটি কেবল পূর্ণসংখ্যা নেয়)।
  • ixসাধারণত আচরণ করার চেষ্টা করে তবে কোনও লেবেল সূচীতে উপস্থিত না থাকলে locএমন আচরণে ফিরে আসে iloc

কিছু সূক্ষ্মতা লক্ষ্য করা গুরুত্বপূর্ণ যেগুলি ixব্যবহারে কিছুটা জটিল করে তুলতে পারে:

  • যদি সূচকটি পূর্ণসংখ্যার ধরণের হয় ixতবে কেবলমাত্র লেবেল-ভিত্তিক সূচক ব্যবহার করবে এবং অবস্থান-ভিত্তিক সূচকগুলিতে ফিরে যাবে না। যদি তালিকাটি সূচকে না থাকে তবে একটি ত্রুটি উত্থাপিত হয়।

  • যদি সূচকটিতে কেবলমাত্র পূর্ণসংখ্যা থাকে না , তবে কোনও পূর্ণসংখ্যার দেওয়া হয়, ixতাত্ক্ষণিকভাবে লেবেল-ভিত্তিক সূচকের পরিবর্তে অবস্থান ভিত্তিক সূচক ব্যবহার করা হবে। তবে ixযদি অন্য কোনও ধরণের (যেমন একটি স্ট্রিং) দেওয়া হয় তবে এটি লেবেল ভিত্তিক সূচক ব্যবহার করতে পারে।


তিনটি পদ্ধতির মধ্যে পার্থক্য বর্ণনা করার জন্য, নিম্নলিখিত সিরিজটি বিবেচনা করুন:

>>> s = pd.Series(np.nan, index=[49,48,47,46,45, 1, 2, 3, 4, 5])
>>> s
49   NaN
48   NaN
47   NaN
46   NaN
45   NaN
1    NaN
2    NaN
3    NaN
4    NaN
5    NaN

আমরা পূর্ণসংখ্যার মানটি স্লাইসিংয়ের দিকে লক্ষ্য করব 3

এই ক্ষেত্রে, s.iloc[:3]আমাদের প্রথম 3 টি সারি ফেরত দেয় (যেহেতু এটি 3 অবস্থান হিসাবে বিবেচনা করে) এবং s.loc[:3]আমাদের প্রথম 8 টি সারি দেয় (যেহেতু এটি 3 টি লেবেল হিসাবে বিবেচনা করে):

>>> s.iloc[:3] # slice the first three rows
49   NaN
48   NaN
47   NaN

>>> s.loc[:3] # slice up to and including label 3
49   NaN
48   NaN
47   NaN
46   NaN
45   NaN
1    NaN
2    NaN
3    NaN

>>> s.ix[:3] # the integer is in the index so s.ix[:3] works like loc
49   NaN
48   NaN
47   NaN
46   NaN
45   NaN
1    NaN
2    NaN
3    NaN

নোটিশটি s.ix[:3]একই সিরিজটি ফেরত দেয় s.loc[:3]কারণ এটি অবস্থানের উপর কাজ করার চেয়ে লেবেলের সন্ধান করে (এবং সূচকটি sপূর্ণসংখ্যার ধরণের হয়)।

যদি আমরা একটি পূর্ণসংখ্যা লেবেল যা সূচকে না বলে চেষ্টা করি (বলুন 6)?

s.iloc[:6]প্রত্যাশা অনুযায়ী সিরিজের প্রথম 6 টি সারি এখানে ফিরে আসে। যাইহোক, s.loc[:6]সূচকে 6না থাকায় একটি কীআরার উত্থাপন করে।

>>> s.iloc[:6]
49   NaN
48   NaN
47   NaN
46   NaN
45   NaN
1    NaN

>>> s.loc[:6]
KeyError: 6

>>> s.ix[:6]
KeyError: 6

উপরে উল্লিখিত s.ix[:6]সূক্ষ্মতা অনুসারে , এখন একটি কী-ইরার উত্থাপন করেছে কারণ এটি এর মতো কাজ করার চেষ্টা করে locতবে 6সূচীতে কোনও খুঁজে পায় না । কারণ আমাদের সূচকটি পূর্ণসংখ্যার ধরণের ixএবং এর মতো আচরণে পিছিয়ে আসে না iloc

তবে, যদি আমাদের সূচকটি মিশ্র প্রকারের হয় তবে একটি পূর্ণসংখ্যা দেওয়া কী- এরর বাড়ানোর পরিবর্তে তাত্ক্ষণিকভাবে ixআচরণ করবে iloc:

>>> s2 = pd.Series(np.nan, index=['a','b','c','d','e', 1, 2, 3, 4, 5])
>>> s2.index.is_mixed() # index is mix of different types
True
>>> s2.ix[:6] # now behaves like iloc given integer
a   NaN
b   NaN
c   NaN
d   NaN
e   NaN
1   NaN

মনে রাখবেন যে ixএখনও অ-পূর্ণসংখ্যা গ্রহণ করতে পারে এবং এর মতো আচরণ করতে পারে loc:

>>> s2.ix[:'c'] # behaves like loc given non-integer
a   NaN
b   NaN
c   NaN

সাধারণ পরামর্শ হিসাবে, আপনি যদি কেবলমাত্র লেবেলগুলি ব্যবহার করে সূচিকর্ম করে থাকেন বা কেবল পূর্ণসংখ্যার অবস্থানগুলি ব্যবহার করে সূচিকর্ম করেন, অপ্রত্যাশিত ফলাফলগুলি এড়াতে locবা ilocএড়ানোর জন্য - ব্যবহার না করার চেষ্টা করুন ix


অবস্থান ভিত্তিক এবং লেবেল-ভিত্তিক সূচকের সংমিশ্রণ

কখনও কখনও ডেটাফ্রেম দেওয়া হয়, আপনি সারি এবং কলামগুলির জন্য লেবেল এবং অবস্থানগত সূচক পদ্ধতিগুলি মিশ্রিত করতে চাইবেন।

উদাহরণস্বরূপ, নিম্নলিখিত ডেটাফ্রেমটি বিবেচনা করুন। কিভাবে শ্রেষ্ঠ পর্যন্ত সহ 'গ' সারি যেভাবেই এবং প্রথম চার কলাম নেবেন?

>>> df = pd.DataFrame(np.nan, 
                      index=list('abcde'),
                      columns=['x','y','z', 8, 9])
>>> df
    x   y   z   8   9
a NaN NaN NaN NaN NaN
b NaN NaN NaN NaN NaN
c NaN NaN NaN NaN NaN
d NaN NaN NaN NaN NaN
e NaN NaN NaN NaN NaN

পান্ডাসের পূর্ববর্তী সংস্করণগুলিতে (০.২০.০০ এর পূর্বে) ixআপনাকে এটি খুব সুন্দরভাবে করতে দেয় - আমরা লেবেলের মাধ্যমে সারিগুলি এবং কলামগুলি অবস্থান অনুসারে টুকরো টুকরো করতে পারি (নোট করুন যে কলামগুলির জন্য, ixডিফল্টভাবে অবস্থান-ভিত্তিক স্লাইসিং করতে হবে যেহেতু 4কলামের নাম নয়) ):

>>> df.ix[:'c', :4]
    x   y   z   8
a NaN NaN NaN NaN
b NaN NaN NaN NaN
c NaN NaN NaN NaN

প্যান্ডাসের পরবর্তী সংস্করণগুলিতে এবং আমরা ilocঅন্য পদ্ধতির সাহায্যে এই ফলাফলটি অর্জন করতে পারি :

>>> df.iloc[:df.index.get_loc('c') + 1, :4]
    x   y   z   8
a NaN NaN NaN NaN
b NaN NaN NaN NaN
c NaN NaN NaN NaN

get_loc()একটি সূচক পদ্ধতি যার অর্থ "এই সূচীতে লেবেলের অবস্থান পান"। নোট করুন যেহেতু টুকরো টুকরো টুকরো টুকরো টুকরোটি ilocএর শেষ পয়েন্টের সাথে একচেটিয়া, তাই সারি 'সি' চাইলে আমাদের অবশ্যই এই মানটিতে 1 যুক্ত করতে হবে।

পান্ডাদের ডকুমেন্টেশনের আরও উদাহরণ এখানে রয়েছে


12
দুর্দান্ত ব্যাখ্যা! আমার সাথে সম্পর্কিত একটি প্রশ্ন সর্বদা ছিল সেটিংওয়াইথকপির সতর্কতাগুলির সাথে যদি কোনও লোক, আইলোক এবং আইএক্সের সম্পর্ক থাকে? কিছু ডকুমেন্টেশন নেই কিন্তু সৎ হতে আমি এখনও আছি একটু বিভ্রান্ত pandas.pydata.org/pandas-docs/stable/...
measureallthethings

3
@measureallthethings: loc, ilocএবং ixশক্তি এখনও সতর্কবার্তা আরম্ভ যদি তারা একসঙ্গে শৃঙ্খলাবদ্ধ করা হয়। লিঙ্কযুক্ত ডক্সে ডেটাফ্রেম উদাহরণটি ব্যবহার করা dfmi.loc[:, 'one'].loc[:, 'second']সতর্কবার্তাকে ঠিক ট্রিগার করে dfmi['one']['second']কারণ প্রথম সূচীকরণ ক্রিয়াকলাপের মাধ্যমে ডেটার অনুলিপি (দেখার পরিবর্তে) ফিরে আসতে পারে।
অ্যালেক্স রিলি

আপনি যদি কোনও তারিখের সাথে ডেটইন্ডেক্স বা অন্য কোনও কিছুর সন্ধান করতে চান তবে আপনি কী ব্যবহার করবেন df.ix[date, 'Cash']?
cjm2671

@ cjm2671: উভয় locবা ixযে ক্ষেত্রে কাজ করা উচিত। উদাহরণস্বরূপ, df.loc['2016-04-29', 'Cash']'নগদ' কলাম থেকে নির্দিষ্ট তারিখের সাথে সমস্ত সারি সূচী ফিরে আসবে। (স্ট্রিং সহ সূচিপত্রগুলি পুনরুদ্ধার করার সময় আপনি নিজের মতো নির্দিষ্ট সুনির্দিষ্ট হতে পারেন, উদাহরণস্বরূপ, '2016-01'জানুয়ারী 2016-এ পড়ার সমস্ত তারিখের সময় নির্বাচন করবেন, 2016 '2016-01-02 11' 2 জানুয়ারির তারিখের সময়গুলি 11 সালের সাথে নির্বাচন করবে: ??: ?? ।)
অ্যালেক্স রিলি

আপনি যদি এই উত্তরটি কোনও মুহুর্তে আপডেট করতে চান তবে এখানে ix github.com/pandas-dev/pandas/issues/14218-
ডেস্ক

142

ilocপূর্ণসংখ্যার অবস্থানের ভিত্তিতে কাজ করে। সুতরাং আপনার সারি লেবেলগুলি যা তা বিবেচনা করুন না কেন আপনি সর্বদা উদাহরণস্বরূপ, প্রথম সারিতে কাজটি করতে পারেন

df.iloc[0]

অথবা শেষ পাঁচটি সারি করে

df.iloc[-5:]

আপনি এটি কলামগুলিতেও ব্যবহার করতে পারেন। এটি তৃতীয় কলামটি পুনরুদ্ধার করে:

df.iloc[:, 2]    # the : in the first position indicates all rows

সারি এবং কলামগুলির ছেদগুলি পেতে আপনি তাদের একত্রিত করতে পারেন:

df.iloc[:3, :3] # The upper-left 3 X 3 entries (assuming df has 3+ rows and columns)

অন্যদিকে, .locনামযুক্ত সূচকগুলি ব্যবহার করুন। সারি এবং কলাম লেবেল হিসাবে স্ট্রিং সহ একটি ডেটা ফ্রেম সেট আপ করুন:

df = pd.DataFrame(index=['a', 'b', 'c'], columns=['time', 'date', 'name'])

তারপরে আমরা প্রথম সারিটি পেতে পারি

df.loc['a']     # equivalent to df.iloc[0]

এবং 'date'কলামের দ্বিতীয় দুটি সারি দ্বারা

df.loc['b':, 'date']   # equivalent to df.iloc[1:, 1]

ইত্যাদি। এখন, সম্ভবত এটি উল্লেখযোগ্যভাবে মূল্যবান যে কোনওটির জন্য ডিফল্ট সারি এবং কলাম সূচকগুলি DataFrame0 থেকে এবং এই ক্ষেত্রে ilocএবং locএটি একইভাবে কাজ করবে। আপনার তিনটি উদাহরণ সমান why আপনার যদি স্ট্রিং বা ডেটটাইমের মতো একটি অ-সংখ্যাসূচক সূচি থাকে df.loc[:5] তবে একটি ত্রুটি বাড়িয়ে তুলবে।

এছাড়াও, আপনি কেবল ডেটা ফ্রেমের ব্যবহার করে কলাম পুনরুদ্ধার করতে পারেন __getitem__:

df['time']    # equivalent to df.loc[:, 'time']

এখন ধরুন আপনি অবস্থান এবং নামকরণের সূচকগুলি মিশ্রিত করতে চান, এটি হচ্ছে কলামগুলিতে সারি এবং অবস্থানের নাম ব্যবহার করে সূচীকরণ করা (স্পষ্ট করার জন্য, আমার অর্থ সারি সূচক এবং স্ট্রিজের সাথে স্ট্রিং সহ একটি ডেটা ফ্রেম তৈরি করার চেয়ে আমাদের ডেটা ফ্রেম থেকে নির্বাচন করুন) কলাম সূচক)। এটি এখানে .ixআসে:

df.ix[:2, 'time']    # the first two rows of the 'time' column

আমি মনে করি এটিও উল্লেখযোগ্য যে আপনি সেই locপদ্ধতিতে বুলিয়ান ভেক্টরগুলিও পাস করতে পারেন । উদাহরণ স্বরূপ:

 b = [True, False, True]
 df.loc[b] 

এর 1 ম এবং 3 য় সারিটি প্রদান করবে df। এটি df[b]নির্বাচনের জন্য সমতুল্য , তবে এটি বুলিয়ান ভেক্টরগুলির মাধ্যমে নির্ধারণের জন্যও ব্যবহার করা যেতে পারে:

df.loc[b, 'name'] = 'Mary', 'John'

Df.iloc [:,:] সমস্ত সারি এবং কলামের সমান?
অ্যালভিস

এটি হবে, হিসাবে হবে df.loc[:, :]। এটি সম্পূর্ণরূপে মানগুলি পুনরায় বরাদ্দ করতে DataFrameবা এটির একটি দৃষ্টিভঙ্গি তৈরি করতে ব্যবহৃত হতে পারে।
জোকনড্রন

119

আমার মতে, গৃহীত উত্তরটি বিভ্রান্তিকর, যেহেতু এটি কেবলমাত্র হারিয়ে যাওয়া মান সহ একটি ডেটা ফ্রেম ব্যবহার করে। আমিও মত শব্দ না অবস্থান-ভিত্তিক জন্য .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এবং Cornelia2 এবং 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'

6
বাহ, এটি আমি খুব প্রোগ্রামিংয়ের একটি বিষয় জুড়ে এসেছি এমন একটি খুব ভালভাবে স্পষ্টরূপে এবং স্পষ্ট ব্যাখ্যা দিয়েছিলাম, আপনি সর্বশেষে সাধারণ সূচী সম্পর্কে যা ব্যাখ্যা করেছেন যা সারি বা কলামগুলিতে কাজ করে তা আমাদের লোক এবং iloc থাকার এক কারণ of পদ্ধতি। আমি ডেটাচ্যাম্প কোর্সে সেই ক্যাভিয়েট জুড়ে এসেছি। ক।) df.colলাম এবং df.index কি ফিরে আসে? এটি স্ট্রিংয়ের তালিকা? যদি এটি একটি তালিকা হয় তবে এটি কি এই তালিকায় এই ডিএফ কলামগুলি [[2,4]] এর মতো দুটি উপাদান অ্যাক্সেস করার অনুমতি পাবে? খ।) আমি কি df.col কলামে get_loc () কল করতে পারি? গ।) আইলোকের ক্ষেত্রে আমাদের কেন ডিএফ ['বয়স']> 30. মূল্যবোধ কল করতে হবে।
প্রাগুন

আমি এর আগে দেখেছি সেরা অ্যানসোয়ার।
সর্বাধিক

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