পূর্ণসংখ্যা সূচক দ্বারা পান্ডাস সিরিজ / ডেটা ফ্রেমের একটি সারি নির্বাচন করা


395

আমি কেন আগ্রহী df[2]না কেন সমর্থিত নয়, যখন df.ix[2]এবং df[2:3]উভয়ই কাজ করে।

In [26]: df.ix[2]
Out[26]: 
A    1.027680
B    1.514210
C   -1.466963
D   -0.162339
Name: 2000-01-03 00:00:00

In [27]: df[2:3]
Out[27]: 
                  A        B         C         D
2000-01-03  1.02768  1.51421 -1.466963 -0.162339

পাইথন ইনডেক্সিং কনভেনশনের সাথে সামঞ্জস্য df[2]রেখে একইভাবে কাজ করার আশা করব df[2:3]। একক পূর্ণসংখ্যার দ্বারা ইনডেক্সিং সারিটি সমর্থন না করার জন্য কি কোনও নকশার কারণ রয়েছে?


4
df.ix[2]কাজ করে না - কমপক্ষে নাpandas version '0.19.2'
জহরা

9
ইনডেক্সিং অপারেটরের মাধ্যমে সারি এবং কলাম নির্বাচনের পার্থক্য দেখতে[] , নীচের এই উত্তরটি দেখুন । এছাড়াও কখনও ব্যবহার না করে .ix, এটি
অবহেলা করা হয়

উত্তর:


551

@ হাইওয়াই প্রতিধ্বনিত, নতুন ডক্সটি 0.11 এ দেখুন

http://pandas.pydata.org/pandas-docs/stable/indexing.html

এখানে আমাদের কাছে নতুন অপারেটর রয়েছে, .ilocকেবল পূর্ণসংখ্যার সূচকে .locসমর্থন করার জন্য এবং স্পষ্টতাকে সমর্থন করতে কেবল লেবেল সূচককে সমর্থন করে

যেমন এই দৃশ্যটি কল্পনা করুন

In [1]: df = pd.DataFrame(np.random.rand(5,2),index=range(0,10,2),columns=list('AB'))

In [2]: df
Out[2]: 
          A         B
0  1.068932 -0.794307
2 -0.470056  1.192211
4 -0.284561  0.756029
6  1.037563 -0.267820
8 -0.538478 -0.800654

In [5]: df.iloc[[2]]
Out[5]: 
          A         B
4 -0.284561  0.756029

In [6]: df.loc[[2]]
Out[6]: 
          A         B
2 -0.470056  1.192211

[] সারিগুলি টুকরো টুকরো করে (লেবেল অবস্থান অনুসারে)


7
আপনি যদি দ্বিতীয় এবং তৃতীয় এবং চতুর্থ সারিতে চান?
ফ্যাকফি 20

1
আপনি কেবল সূচকগুলির একটি তালিকা পাস করতে পারেন; ডক্স উপরের দিকে নির্দেশিত
জেফ

2
এই নামের জন্য কি কারও যুক্তি আছে? আমার এগুলি মনে রাখা শক্ত কারণ আমি সুনির্দিষ্ট কেন ilocএবং locলেবেল তা নিশ্চিত নই is
কিলোজুলগুলি

3
@ কিলোজুলগুলি সূচকে .ilocতাদের ক্রম অনুসারে জিনিসগুলি দেখায় (যেমন .iloc[[2]]) দ্বিতীয় "সারি" df। সেই সারিটি সূচকের অবস্থানে রয়েছে 4.locতাদের সূচক মান দ্বারা তাদের আপ দেখায়। তাহলে সম্ভবত "আইলোক" কি "আই" এর মতো A[i]? :)
জিম কে।

1
@ জেফ - এটি দুর্দান্ত কাজ করে, তবে যখন আপনি আপনার ডেটা ফ্রেম থেকে কোনও সারি যেমন নকল করতে চান df.loc[-1] = df.iloc[[0]]এবং সন্নিবেশ করতে চান তখন কি হবে ? ফ্রেমটি একটি যুক্ত সূচক কলাম দেওয়ার সময় ত্রুটি নিয়ে আসে ValueError: cannot set a row with mismatched columns (দেখুন স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 73৩40০৫7171১/২ )
গ্রোলার

63

ডেটা ফ্রেম ইনডেক্সিং অপারেটরের প্রাথমিক উদ্দেশ্য, []কলামগুলি নির্বাচন করা।

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

সুতরাং, উপরের প্রশ্নে: df[2]পূর্ণসংখ্য মানের সাথে মেলে একটি কলামের নাম সন্ধান করে 2। এই কলামটি বিদ্যমান নেই এবং একটি KeyErrorউত্থাপিত হয়েছে।


যখন স্লাইস নোটেশন ব্যবহৃত হয় তখন ডেটা ফ্রেম ইনডেক্সিং অপারেটর সারিগুলি নির্বাচন করতে আচরণের পুরোপুরি পরিবর্তন করে

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

df[2:3]

এটি শেষ উপাদানটি ব্যতীত 2 থেকে 3 অবধি পূর্ণসংখ্যার সারি দিয়ে শুরু করবে ice সুতরাং, শুধুমাত্র একটি সারি। নিম্নলিখিতটি সংখ্যক 6 থেকে শুরু করে সারি নির্বাচন করে প্রতি তৃতীয় সারিতে 20 টি যোগ করে না।

df[6:20:3]

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

আমি এই স্লাইস সংকেতটিকে কখনই ইনডেক্সিং অপারেটরের সাথে ব্যবহার করি না কারণ এটি সুস্পষ্ট এবং খুব কমই ব্যবহৃত হয় না। সারি দ্বারা টুকরা করার সময়, সাথে লাঠি .loc/.iloc


ইনডেক্সিং অপারেটর ব্যবহার করে অন্য ডেটাফ্রেমে সারি যুক্ত করার চেষ্টা করা হচ্ছে তবে অন্য ডেটাফ্রেমটি খালি রয়েছে। কেন?
FindOutIslam এখন

23

আপনি ডেটাফ্রেমকে সিরিজের একটি ডিক হিসাবে ভাবতে পারেন। df[key]দ্বারা কলাম সূচী নির্বাচন করার চেষ্টা করুন keyএবং একটি সিরিজ অবজেক্ট প্রদান করে।

তবে [] এর অভ্যন্তরে টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো কারণ এটি একটি খুব সাধারণ কাজ because

আপনি বিস্তারিতটির জন্য দস্তাবেজটি পড়তে পারেন:

http://pandas.pydata.org/pandas-docs/stable/indexing.html#basics


ইঙ্গিত দেওয়ার জন্য আপনাকে ধন্যবাদ। মজার বিষয়, এই ধরণের জিনিসটি এখনও সময়ে সময়ে প্রশ্ন পান্ডাস তৈরি করে। কিছু পরিস্থিতিতে আচরণে ব্যতিক্রম যুক্ত করা, .. আমার কাছে এটি কিছুটা সুবিধার জন্য ধারাবাহিকতা ত্যাগ করার মতো মনে হয়।
কার্ল বার্গার

15

পান্ডাস টেবিলের সূচক-ভিত্তিক অ্যাক্সেসের জন্য, কেউ টেবিলটিকে নম্পি অ্যারে হিসাবে রূপান্তর করতে numpy.as_array বিকল্পটি বিবেচনা করতে পারে

np_df = df.as_matrix()

এবং তারপর

np_df[i] 

কাজ করবে


11
যা ডেটাফ্রেম সূচক এবং অন্য সমস্ত পান্ডার অফারগুলির পুরো উদ্দেশ্যকে পরাস্ত করে
Fábio Dias

6

আপনি সোর্স কোডটি একবার দেখে নিতে পারেন ।

DataFrame_slice()স্লাইস করার জন্য একটি ব্যক্তিগত ফাংশন রয়েছে DataFrameএবং এটি প্যারামিটারটিকে axisকোন অক্ষটি টুকরো টুকরো করে তা নির্ধারণ করতে দেয় । __getitem__()জন্য DataFrameযখন invoking অক্ষ সেট করেনি _slice()। সুতরাং _slice()এটি ডিফল্ট অক্ষ 0 দ্বারা স্লাইস।

আপনি একটি সহজ পরীক্ষা নিতে পারেন, এটি আপনাকে সহায়তা করতে পারে:

print df._slice(slice(0, 2))
print df._slice(slice(0, 2), 0)
print df._slice(slice(0, 2), 1)

5

আপনি এই জাতীয় ডেটা ফ্রেমের মাধ্যমে লুপ করতে পারেন।

for ad in range(1,dataframe_c.size):
    print(dataframe_c.values[ad])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.