পান্ডাস লোক বনাম আইলোক বনাম ix বনাম। বনাম আইট?


171

সম্প্রতি আমার নিরাপদ স্থান (আর) থেকে পাইথনে শাখা শুরু করে এবং সেল সেলাইজেশন / নির্বাচন দ্বারা কিছুটা বিভ্রান্ত হয়ে পড়েছি Pandas। আমি ডকুমেন্টেশনটি পড়েছি তবে বিভিন্ন স্থানীয়করণ / নির্বাচন বিকল্পগুলির ব্যবহারিক প্রভাবগুলি বোঝার জন্য আমি লড়াই করে যাচ্ছি।

  • একটি কারণ কেন আমি কখনো ব্যবহার করা উচিত হয় .locবা .ilocসবচেয়ে সাধারণ বিকল্প উপর .ix?
  • আমি বুঝি যে .loc, iloc, at, এবং iatকিছু নিশ্চিত শুদ্ধি যে প্রদান করতে পারে .ixপ্রস্তাব না করতে পারেন, কিন্তু আমি এও পড়েছি যেখানে .ixবোর্ড জুড়ে দ্রুততম সমাধান হতে থাকে।
  • দয়া করে সত্যিকারের বিশ্বের ব্যাখ্যা করুন, সর্বোপরি অনুশীলন যুক্তি যুক্তি ব্যতীত অন্য কিছু ব্যবহারের পিছনে .ix?

2
খুঁজে বার করো stackoverflow.com/questions/27667759/...
cphlewis

3
locলেবেল ভিত্তিক সূচীকরণ তাই মূলত একটি সারিতে একটি মান সন্ধান করা হয়, ilocএটি পূর্ণসংখ্যার সারি ভিত্তিক সূচক হয়, ixএটি একটি সাধারণ পদ্ধতি যা প্রথমে লেবেল ভিত্তিক সম্পাদন করে, যদি এটি ব্যর্থ হয় তবে এটি পূর্ণসংখ্য ভিত্তিক হয়ে যায়। atঅবচয় করা হয়েছে এবং এটি আপনাকে আর ব্যবহার না করার পরামর্শ দেওয়া হচ্ছে। বিবেচনা করার মতো অন্যান্য বিষয় হ'ল আপনি যা করার চেষ্টা করছেন তা হ'ল এই কয়েকটি পদ্ধতির মাধ্যমে ডকসটি
EdChum

1
@ এডচাম - আপনাকে কী বলে যে তা হ্রাস atকরা হয়েছে? আমি এর মধ্যে দেখতে না (অথবা IAT ) দস্তাবেজ।
রাশ

1
এটি একটি ত্রুটি যা এটি
অবহেলা করা

4
মধ্যে বিস্তারিত ব্যাখ্যা loc, ixএবং ilocএখানে: stackoverflow.com/questions/31593201/...
অ্যালেক্স রাইলি

উত্তর:


142


লোকেশন : কেবল সূচী আইলোকের উপর কাজ করুন: অবস্থানের উপরে কাজ করুন
ix: আপনি ডাটাফ্রেম থেকে তথ্য সূচীতে না থাকলে তথ্য পেতে পারেন
: স্কেলারের মান পান। এটি একটি খুব দ্রুত লোক
আইট: স্কেলারের মান পান। এটি খুব দ্রুত আইলোক

http://pyciencia.blogspot.com/2015/05/obtener-y-filtrar-datos-de-un-dataframe.html

নোট: এর হিসাবে pandas 0.20.0, .ixindexer হয় অবচিত আরো কঠোর পক্ষে .ilocএবং .locindexers।


9
যদি atএবং iatখুব দ্রুত সংস্করণ locএবং iloc, তাহলে কেন ব্যবহার locএবং ilocএ সব?
রায়

57
atএবং iatএকটি স্কেলের, যে dataframe একটি একক উপাদান অ্যাক্সেস করতে অভিপ্রেত যখন locএবং ilocসম্ভাব্য ভেক্টরকৃত কাজগুলি করতে, একই সময় অ্যাক্সেস বিভিন্ন উপাদান ments হয়।
এনকাসাস

@ কানাশাস - আমি যদি ডকুমেন্টেশনটি সঠিকভাবে পড়ে থাকি তবে .এটি কেবল সূচী দ্বারা অ্যাক্সেস করতে পারে তবে কলামের নাম দিয়েও অ্যাক্সেস করতে পারে। দ্রুত .at ব্যবহারের কোনও উপায় কি তবে সূচকের পরিবর্তে কলামের নামটি ব্যবহার করুন? X = df.loc [df.Id == উত্স_আইডি, 'কিছু ভ্যালু'] প্রতিস্থাপনের মতো। মানগুলি [0] কে x = df.at [df.Id == উত্স_আইডি, 'কিছু ভ্যালু'] দিয়ে। .At সহ সংস্করণটি "মানমূল্য: একটি পূর্ণসংখ্যার সূচকে ভিত্তিক সূচীতে কেবলমাত্র পূর্ণসংখ্যার সূচক থাকতে পারে"
ভেগা

94

জন্য আপডেট pandas 0.20প্রদত্ত যে ixঅসমর্থিত হয়েছে। এটি শুধুমাত্র কিভাবে ব্যবহার করতে প্রমান loc, iloc, at, iat, set_value, কিন্তু সম্পন্ন করার জন্য কিভাবে, মিশ্র অবস্থানগত / ট্যাগ ভিত্তিক ইন্ডেক্স।


loc- লেবেল ভিত্তিক
আপনাকে সূচক হিসাবে 1-ডি অ্যারে পাস করার অনুমতি দেয়। অ্যারেগুলি সূচক বা কলামের স্লাইস (সাবসেট) হতে পারে, বা সেগুলি বুলিয়ান অ্যারে হতে পারে যা সূচক বা কলামগুলির দৈর্ঘ্যে সমান।

বিশেষ দ্রষ্টব্য: যখন স্কেলার locসূচকটি পাস হয়, তখন একটি নতুন সূচক বা কলাম মান নির্ধারণ করতে পারে যা এর আগে উপস্থিত ছিল না।

# label based, but we can use position values
# to get the labels from the index object
df.loc[df.index[2], 'ColName'] = 3

df.loc[df.index[1:3], 'ColName'] = 3

iloc- অবস্থান ভিত্তিক পজিশনের পরিবর্তে সূচকের মানগুলির সাথে
সমান loc। তবে আপনি নতুন কলাম বা সূচী নির্ধারণ করতে পারবেন না

# position based, but we can get the position
# from the columns object via the `get_loc` method
df.iloc[2, df.columns.get_loc('ColName')] = 3

df.iloc[2, 4] = 3

df.iloc[:3, 2:4] = 3

at- লেবেল ভিত্তিক স্কেলার সূচকগুলির জন্য
একই রকম কাজ Works অ্যারে সূচকগুলিতে পরিচালনা করতে পারবেন নাকরতে পারা! নতুন সূচক এবং কলাম নির্ধারণ করুন। loc

সুবিধা বেশি locহ'ল এটি দ্রুত।
অসুবিধা হ'ল আপনি সূচকগুলির জন্য অ্যারে ব্যবহার করতে পারবেন না।

# label based, but we can use position values
# to get the labels from the index object
df.at[df.index[2], 'ColName'] = 3

df.at['C', 'ColName'] = 3

iat- অবস্থান ভিত্তিক
অনুরূপভাবে কাজ করে iloc। অ্যারে সূচকগুলিতে কাজ করতে পারে নানা পারেন! নতুন সূচক এবং কলাম নির্ধারণ করুন।

সুবিধা বেশি ilocহ'ল এটি দ্রুত।
অসুবিধা হ'ল আপনি সূচকগুলির জন্য অ্যারে ব্যবহার করতে পারবেন না।

# position based, but we can get the position
# from the columns object via the `get_loc` method
IBM.iat[2, IBM.columns.get_loc('PNL')] = 3

set_value- লেবেল ভিত্তিক স্কেলার সূচকগুলির জন্য
একই রকম কাজ Works অ্যারে সূচকগুলিতে পরিচালনা করতে পারবেন নাকরতে পারা! নতুন সূচক এবং কলাম নির্ধারণ করুনloc

উপকারী সুপার দ্রুত, কারণ খুব কম ওভারহেড আছে!
অসুবিধা খুব কম ওভারহেড রয়েছে কারণ pandasসুরক্ষা যাচাই করে নিচ্ছেন না। আপনার নিজের ঝুঁকিতে ব্যবহার করুন । এছাড়াও, এটি জনসাধারণের ব্যবহারের জন্য নয়।

# label based, but we can use position values
# to get the labels from the index object
df.set_value(df.index[2], 'ColName', 3)

set_valueসঙ্গেtakable=True - অবস্থান ভিত্তিক
ওয়ার্কস একভাবে করতেiloc। অ্যারে সূচকগুলিতে কাজ করতে পারে নানা পারেন! নতুন সূচক এবং কলাম নির্ধারণ করুন।

উপকারী সুপার দ্রুত, কারণ খুব কম ওভারহেড আছে!
অসুবিধা খুব কম ওভারহেড রয়েছে কারণ pandasসুরক্ষা যাচাই করে নিচ্ছেন না। আপনার নিজের ঝুঁকিতে ব্যবহার করুন । এছাড়াও, এটি জনসাধারণের ব্যবহারের জন্য নয়।

# position based, but we can get the position
# from the columns object via the `get_loc` method
df.set_value(2, df.columns.get_loc('ColName'), 3, takable=True)

সুতরাং, অবস্থানের দ্বারা একাধিক কলামগুলি পড়ার / সেট করার কোনও সহজ উপায় আছে? আরও, বলুন, আমি প্রতিটি কলামে প্রতিটি মূল্যগুলির অ্যারে যুক্ত করতে চেয়েছিলাম, এটি কি সহজেই সম্পন্ন হয়?
wordmith

@WWWm স্মারক সাথে ডেটাফ্রেমের শেষে নতুন কলামগুলি যুক্ত করার সহজ উপায় রয়েছে ways এমনকি শুরুও। যদি পদগুলি জড়িত থাকে তবে না, কোনও সহজ উপায় নেই।
পাইরাস্কোয়ারড

এই উত্তরটি আমার প্রয়োজন মাত্র ছিল! পান্ডস অবশ্যই শক্তিশালী, তবে এটি সবকিছু বোঝার জন্য জটিল এবং একসাথে টুকরো টুকরো করার ব্যয় করে আসে।
slhck

1
নোটটি যে সংস্করণ 0.21 set_valueএর পক্ষে .atএবং এর .iatপরে
অবহিত করা হয়েছে

59

দুটি প্রাথমিক উপায় রয়েছে যে পান্ডারা ডেটা ফ্রেম থেকে নির্বাচন করে।

  • লেবেল দ্বারা
  • দ্বারা পূর্ণসংখ্যা অবস্থান

ডকুমেন্টেশনটি পূর্ণসংখ্যার অবস্থান উল্লেখ করার জন্য শব্দ পদ ব্যবহার করে । আমি এই পরিভাষাটি পছন্দ করি না কারণ আমার মনে হয় এটি বিভ্রান্তিকর। পূর্ণসংখ্যার অবস্থানটি আরও বর্ণনামূলক এবং ঠিক এর মতোই। এখানে মূল শব্দটি ইন্টিগের - পূর্ণসংখ্যার অবস্থান দ্বারা নির্বাচন করার সময় আপনাকে অবশ্যই পূর্ণসংখ্যার ব্যবহার করতে হবে।.iloc

সংক্ষিপ্তসারটি দেখানোর আগে আসুন সকলে নিশ্চিত হয়ে যান যে ...

.ix হ্রাস ও অস্পষ্ট এবং কখনও ব্যবহার করা উচিত নয়

পান্ডার জন্য তিনটি প্রাথমিক সূচক রয়েছে । আমাদের নিজস্ব সূচীকরণ অপারেটর রয়েছে (বন্ধনীগুলি []) .loc, এবং .iloc। আসুন তাদের সংক্ষিপ্তসার দিন:

  • []- প্রাথমিকভাবে কলামগুলির সাবসেটগুলি নির্বাচন করে তবে সারিগুলিও নির্বাচন করতে পারে। একসাথে সারি এবং কলাম নির্বাচন করতে পারে না।
  • .loc - কেবলমাত্র লেবেল দ্বারা সারি এবং কলামগুলির উপগ্রহ নির্বাচন করে
  • .iloc - কেবল পূর্ণসংখ্যার অবস্থানের দ্বারা সারি এবং কলামগুলির উপগ্রহ নির্বাচন করে

আমি প্রায়শই ব্যবহার করি না .atবা .iatতারা কোনও অতিরিক্ত কার্যকারিতা যুক্ত না করে এবং কেবল সামান্য পারফরম্যান্স বৃদ্ধি করে। আপনার খুব সময় সংবেদনশীল অ্যাপ্লিকেশন না থাকলে আমি তাদের ব্যবহারকে নিরুৎসাহিত করব। নির্বিশেষে, আমাদের তাদের সংক্ষিপ্তসার রয়েছে:

  • .at কেবলমাত্র লেবেল দ্বারা ডেটা ফ্রেমে একক স্কেলারের মান নির্বাচন করে
  • .iat শুধুমাত্র পূর্ণসংখ্যার অবস্থানের দ্বারা ডেটাফ্রেমে একটি একক স্কেলারের মান নির্বাচন করে

লেবেল এবং পূর্ণসংখ্যার অবস্থান অনুসারে বাছাইয়ের পাশাপাশি বুলিয়ান নির্বাচনও বুলিয়ান সূচক হিসাবে বিদ্যমান।


উদাহরণ ব্যাখ্যা .loc, .iloc, বুলিয়ান নির্বাচন এবং .atএবং .iatনিচে দেখানো হয়েছে

আমরা প্রথমে .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 হবে।

আছে বিভিন্ন ইনপুট জন্য আপনি ব্যবহার করতে পারেন .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'

দ্বারা নির্বাচন .atএবং.iat

এর সাথে নির্বাচন .atপ্রায় একইরকম .locতবে এটি আপনার ডেটাফ্রেমে কেবল একটি একক 'সেল' নির্বাচন করে। আমরা সাধারণত এই ঘরটিকে একটি স্কেলারের মান হিসাবে উল্লেখ করি। ব্যবহার করতে .at, এটি কমা দ্বারা পৃথক করা একটি সারি এবং কলাম লেবেল উভয়ই পাস করুন।

df.at['Christina', 'color']
'black'

এর সাথে নির্বাচন .iatপ্রায় একইরকম .ilocতবে এটি কেবল একটি একক স্কেলারের মান নির্বাচন করে। আপনি এটি উভয় সারি এবং কলাম অবস্থানের জন্য একটি পূর্ণসংখ্যার পাস করতে হবে

df.iat[2, 5]
'FL'

31
df = pd.DataFrame({'A':['a', 'b', 'c'], 'B':[54, 67, 89]}, index=[100, 200, 300])

df

                        A   B
                100     a   54
                200     b   67
                300     c   89
In [19]:    
df.loc[100]

Out[19]:
A     a
B    54
Name: 100, dtype: object

In [20]:    
df.iloc[0]

Out[20]:
A     a
B    54
Name: 100, dtype: object

In [24]:    
df2 = df.set_index([df.index,'A'])
df2

Out[24]:
        B
    A   
100 a   54
200 b   67
300 c   89

In [25]:    
df2.ix[100, 'a']

Out[25]:    
B    54
Name: (100, a), dtype: int64

4

এই ছোট ডিএফ দিয়ে শুরু করা যাক:

import pandas as pd
import time as tm
import numpy as np
n=10
a=np.arange(0,n**2)
df=pd.DataFrame(a.reshape(n,n))

আমাদেরও তাই হবে

df
Out[25]: 
        0   1   2   3   4   5   6   7   8   9
    0   0   1   2   3   4   5   6   7   8   9
    1  10  11  12  13  14  15  16  17  18  19
    2  20  21  22  23  24  25  26  27  28  29
    3  30  31  32  33  34  35  36  37  38  39
    4  40  41  42  43  44  45  46  47  48  49
    5  50  51  52  53  54  55  56  57  58  59
    6  60  61  62  63  64  65  66  67  68  69
    7  70  71  72  73  74  75  76  77  78  79
    8  80  81  82  83  84  85  86  87  88  89
    9  90  91  92  93  94  95  96  97  98  99

এর সাথে আমাদের রয়েছে:

df.iloc[3,3]
Out[33]: 33

df.iat[3,3]
Out[34]: 33

df.iloc[:3,:3]
Out[35]: 
    0   1   2   3
0   0   1   2   3
1  10  11  12  13
2  20  21  22  23
3  30  31  32  33



df.iat[:3,:3]
Traceback (most recent call last):
   ... omissis ...
ValueError: At based indexing on an integer index can only have integer indexers

সুতরাং আমরা উপসেটের জন্য .iat ব্যবহার করতে পারি না, যেখানে আমাদের অবশ্যই .iloc ব্যবহার করতে হবে।

তবে আসুন উভয়কে একটি বৃহত ডিএফ থেকে নির্বাচন করার চেষ্টা করি এবং আসুন গতিটি যাচাই করি ...

# -*- coding: utf-8 -*-
"""
Created on Wed Feb  7 09:58:39 2018

@author: Fabio Pomi
"""

import pandas as pd
import time as tm
import numpy as np
n=1000
a=np.arange(0,n**2)
df=pd.DataFrame(a.reshape(n,n))
t1=tm.time()
for j in df.index:
    for i in df.columns:
        a=df.iloc[j,i]
t2=tm.time()
for j in df.index:
    for i in df.columns:
        a=df.iat[j,i]
t3=tm.time()
loc=t2-t1
at=t3-t2
prc = loc/at *100
print('\nloc:%f at:%f prc:%f' %(loc,at,prc))

loc:10.485600 at:7.395423 prc:141.784987

সুতরাং .loc দিয়ে আমরা উপসাগর পরিচালনা করতে পারি এবং .at কেবল একটি একক স্কেলারের সাহায্যে করতে পারি তবে .at এর চেয়ে দ্রুত হয় is

:-)

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