কীভাবে একটি পান্ডাস ডেটা ফ্রেম থেকে মূল্য পেতে হয় এবং সূচি এবং অবজেক্টের ধরণ নয়


104

বলুন আমার কাছে নিম্নলিখিত ডেটা ফ্রেম রয়েছে

চিঠি নম্বর
ক ঘ
খ 2
সি 3
ডি 4

যা নিম্নলিখিত কোডের মাধ্যমে প্রাপ্ত হতে পারে

import pandas as pd

letters=pd.Series(('A', 'B', 'C', 'D'))
numbers=pd.Series((1, 2, 3, 4))
keys=('Letters', 'Numbers')
df=pd.concat((letters, numbers), axis=1, keys=keys)

এখন আমি কলাম লেটারগুলি থেকে মান সি পেতে চাই।

কমান্ড লাইন

df[df.Letters=='C'].Letters

ফিরে আসবে

2 সি
নাম: চিঠি, টাইপ: অবজেক্ট

আমি কীভাবে কেবলমাত্র সি সিটি পেতে পারি এবং পুরো দুটি লাইনের আউটপুট না পেতে পারি?


6
কোনও সম্পর্কযুক্ত নোটে, আপনার ডেটাফ্র্যামটি তৈরির একটি দুর্দান্ত উপায় রয়েছে:pd.DataFrame({'Letters': letters, 'Numbers': numbers})
জো কন্ড্রন

উত্তর:


144
df[df.Letters=='C'].Letters.item()

এটি সূচক / সিরিজের প্রথম উপাদানটি সেই নির্বাচন থেকে ফিরে আসে। এই ক্ষেত্রে, মানটি সর্বদা প্রথম উপাদান।

সম্পাদনা করুন:

অথবা আপনি কোনও লোক () চালাতে পারেন এবং সেভাবে প্রথম উপাদানটি অ্যাক্সেস করতে পারেন। এটি সংক্ষিপ্ত ছিল এবং আমি অতীতে যেভাবে এটি প্রয়োগ করেছি।


2
আমি এই পদ্ধতিটি ভালবাসি, তবে আমি সতর্কতাটি পেয়ে যাচ্ছি:FutureWarning: "item" has been deprecated and will be removed in a future version
অ্যালেক্সজি

2
@AlexG: যদি আপনি এই পরিবর্তে ব্যবহার করতে পারেন: df[df.Letters=='C'].Letters.iloc[0]। এটি ফলাফলের সিরিজে প্রথম উপাদান তৈরি করে (যা অনন্যও)।
আনহ-থি ডিআইএনএইচ

লোক ব্যবহার করে [: 1] এখনও মানটির পরে সূচকটি দেখায় :(
সোনিক সোল

@ অ্যালেক্সজি এবং @ সোনিক সোল: df[df.Letters=='C'].Letters.squeeze()পরিবর্তে ব্যবহার করার চেষ্টা করুন । এটি একইভাবে কাজ করে। :)
ব্যবহারকারীর 78910

52

valuesএনপি অ্যারে হিসাবে মানগুলি ফেরত দিতে বৈশিষ্ট্যটি ব্যবহার করুন এবং তারপরে [0]প্রথম মানটি পেতে ব্যবহার করুন :

In [4]:
df.loc[df.Letters=='C','Letters'].values[0]

Out[4]:
'C'

সম্পাদনা

আমি ব্যক্তিগতভাবে সাবস্ক্রিপ্ট অপারেটরগুলি ব্যবহার করে কলামগুলি অ্যাক্সেস করতে পছন্দ করি:

df.loc[df['Letters'] == 'C', 'Letters'].values[0]

এটি কলামের নামগুলিতে স্পেস বা ড্যাশ থাকতে পারে এমন সমস্যাগুলি এড়িয়ে চলে -যার অর্থ ব্যবহার করে অ্যাক্সেস করা .


1
আমি ব্যক্তিগতভাবে .কলামগুলি অ্যাক্সেস করতে ব্যবহার করি না কারণ এটি সর্বদা উদাহরণস্বরূপ কাজ করবে না যদি কলামের নামটি একটি সংখ্যাসূচক মান দিয়ে শুরু হয় বা কলামের নামের মতো কোনও আলফা অক্ষর নেই তবে আমি সর্বদা পছন্দ করিdf['col_name']
এডচাম

আমি দেখি. কেন আমি যেখানেই তাকাই না কেন, আমি সর্বদা df['col_name']স্বরলিপিটির পরিবর্তে স্বরলিপিটি খুঁজে পাই .। আবার ধন্যবাদ.
এডুয়ার্ডো

1
এটি সত্যই অসম্পূর্ণ, তবে আপনার নির্বাচনের ক্ষেত্রে আপনি ডট স্বরলিপি ব্যবহার করে 'লেটারস' কলামটি অ্যাক্সেস করতে পারেন; df.loc [df.Letters == 'সি']। যদি আপনার কলামের নামগুলিতে শূন্যস্থান থাকে তবে আপনার সম্ভবত রূপান্তরকারীগুলি সেগুলি সরিয়ে ফেলা উচিত, যেমন আপনি যদি কোনও সিএসভি বা এক্সেল ফাইল থেকে আমদানি করেন ing
valkn0t

@ থোমাস-অটো আমি আমার উত্তরটি আপডেট করব তবে কলামগুলি অতিরিক্ত পদক্ষেপ হিসাবে পরিবর্তনের সাথে যদি এটি প্রয়োজন না হয় তবে আমি একমত নই, এই ক্ষেত্রে আমি তাতে কোনও পার্থক্য করার বিষয়ে সম্মতি দিচ্ছি না
এডচাম

1
import pandas as pd

dataset = pd.read_csv("data.csv")
values = list(x for x in dataset["column name"])

>>> values[0]
'item_0'

সম্পাদনা:

আসলে, আপনি কেবলমাত্র কোনও পুরানো অ্যারের মতো ডেটাসেটকে সূচক করতে পারেন।

import pandas as pd

dataset = pd.read_csv("data.csv")
first_value = dataset["column name"][0]

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