ডেটাফ্রেমের একটি সেল থেকে কীভাবে মূল্য পাবেন?


344

আমি এমন একটি শর্ত তৈরি করেছি যা আমার ডেটা ফ্রেম থেকে এক সারি বের করে:

d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]

এখন আমি একটি নির্দিষ্ট কলাম থেকে একটি মান নিতে চাই:

val = d2['col_name']

তবে ফলস্বরূপ আমি একটি ডেটা ফ্রেম পেয়েছি যাতে একটি সারি এবং একটি কলাম ( অর্থাত একটি ঘর) থাকে। আমার যা প্রয়োজন তা নয়। আমার একটি মান দরকার (একটি ফ্লোট নম্বর)। আমি কীভাবে এটি পান্ডায় করতে পারি?


1
যদি আপনি এই উত্তরগুলির কয়েকটি চেষ্টা করেও একটি দিয়ে শেষ করেন তবে SettingWithCopyWarningআপনি সতর্কতা এবং সম্ভাব্য কর্মক্ষেত্র / সমাধানগুলির ব্যাখ্যা দেওয়ার জন্য এই পোস্টটিতে একবার নজর দিতে পারেন ।
সিএস 95

উত্তর:


428

যদি আপনার কেবলমাত্র একটি সারি সহ ডেটাফ্রেম থাকে তবে প্রথমে সিরিজ হিসাবে প্রথম (কেবল) সারিটি অ্যাক্সেস করুন ilocএবং তারপরে কলামের নামটি ব্যবহার করে:

In [3]: sub_df
Out[3]:
          A         B
2 -0.133653 -0.030854

In [4]: sub_df.iloc[0]
Out[4]:
A   -0.133653
B   -0.030854
Name: 2, dtype: float64

In [5]: sub_df.iloc[0]['A']
Out[5]: -0.13365288513107493

1
@ সোফোলজিস্ট এটি দেখছেন, আমার কোনও ধারণা নেই। প্রশ্নটি খানিকটা আশ্চর্যের সাথে শব্দের সাথে দেখা হয়, তবে এটি পড়ে মনে হয় প্রথমার্ধটি উত্তরোত্তর থেকে অবিচ্ছেদ্য। ( atএটি সত্যিই খুব সুন্দর উত্তর, যদিও আমি এটি দেখতে আশ্চর্যজনক মনে করি ix:))
অ্যান্ডি হেডেন

9
@ সোফোলজিস্ট আমি সম্মত হই যে এটি হাস্যকর যে এটি প্রয়োজন। আপনি যখন শর্তসাপতি ইনলাইন পাস করার চেষ্টা করেন তখন এটিও কাজ করে না; my_df.loc[my_df['Col1'] == foo]['Col2']তারপরেও কোনও ধরণের অবজেক্ট ফেরত দেয়<class 'pandas.core.series.Series'>
user5359531

15
নোট করুন যে এই সমাধানটি কোনও সিরিজ দেয়, কোনও মান দেয় না!
এত্তে জুভোনেন

1
@ অ্যাটজুভোনেন এটি নির্ভর করে যদি আপনার সূচক / কলামগুলিতে সদৃশ থাকে (নোট / ক্যাটাসমূহে নকল কলামের সাথে একটি ব্যতিক্রম উত্থাপন করা হবে, একটি সমস্যা ফাইল করবে)।
অ্যান্ডি হেডেন

1
অদ্ভুত। আমি লোকের নামগুলি পড়ি এবং আইলোকটি পূর্ণসংখ্যার জন্য হয় তবে এখানে আমি পূর্ণসংখ্যা এবং নাম উভয়ের জন্যই আইলোক রাখি
mLstudent33

205

এগুলি স্কেলারের জন্য দ্রুত অ্যাক্সেস

In [15]: df = pandas.DataFrame(numpy.random.randn(5,3),columns=list('ABC'))

In [16]: df
Out[16]: 
          A         B         C
0 -0.074172 -0.090626  0.038272
1 -0.128545  0.762088 -0.714816
2  0.201498 -0.734963  0.558397
3  1.563307 -1.186415  0.848246
4  0.205171  0.962514  0.037709

In [17]: df.iat[0,0]
Out[17]: -0.074171888537611502

In [18]: df.at[0,'A']
Out[18]: -0.074171888537611502

9
আমি এই উত্তরটি অনেক পছন্দ করি। তবে আপনি .iloc[-1]['A']at[-1,'A']
যেভাবে

3
এটির উত্তরটি হওয়া উচিত কারণ আমরা কেবলমাত্র একটি উপাদান ভিতরে পেতে মেমরিতে একটি অকেজো লাইন অনুলিপি করি না।
বোর্মাট

3
@ হার্টমুট আপনি সর্বদা খালি করতে পারেনat[df.index[-1],'A']
সিএস 95

105

আপনি আপনার 1x1 ডেটাফ্রেমকে একটি অদ্ভুত অ্যারে রূপান্তর করতে পারেন, তারপরে সেই অ্যারের প্রথম এবং একমাত্র মানটি অ্যাক্সেস করতে পারেন:

val = d2['col_name'].values[0]

10
আরও কিছুটা ব্যাখ্যা দিয়ে দয়া করে আপনার উত্তরের গুণমান উন্নত করুন।
ফ্রাঙ্ক গেমস

মন্তব্য তৈরি করার পূর্বে আপনার প্রাথমিক উত্তরটি সম্পাদনা করুন। ধন্যবাদ
ফ্রাঙ্ক গেমস

2
আমি এই পদ্ধতিটি পছন্দ করি এবং ঘন ঘন এটি ব্যবহার করি। .get_values()[0]পাশাপাশি ব্যবহার করতে ব্যবহৃত ।
অ্যারোনপনে

3
আমি মনে করি এটি সেরা উত্তর যেহেতু এটি কোনও পান্ডাস.সারিজ ফেরত দেয় না এবং এটি সবচেয়ে সহজ।
শন ম্যাকার্থি

পান্ডার দ্বারা সরবরাহিত পদ্ধতিগুলির মধ্যে এর কী সুবিধা রয়েছে?
এএমসি

28

বেশিরভাগ উত্তর ব্যবহার করছে ilocযা অবস্থান অনুসারে নির্বাচনের জন্য ভাল।

আপনার যদি প্রয়োজন অনুসারে লেবেলটি loc আরও সুবিধাজনক হবে।

স্পষ্টভাবে একটি মান পাওয়ার জন্য (অবচয়িতৃত df.get_value ('a', 'A') এর সমতুল্য)

# this is also equivalent to df1.at['a','A']
In [55]: df1.loc['a', 'A'] 
Out[55]: 0.13200317033032932

18

আমার একটি কক্ষের মান প্রয়োজন, কলাম এবং সূচী নাম দ্বারা নির্বাচিত। এই সমাধানটি আমার পক্ষে কাজ করেছে:

original_conversion_frequency.loc[1,:].values[0]


16

এটি পান্ডাস 10.1 / 13.1 এর পরে পরিবর্তনের মতো দেখাচ্ছে

আইলোক উপলব্ধ না হওয়ার আগে আমি 10.1 থেকে 13.1 এ আপগ্রেড করেছি।

এখন 13.1 দিয়ে, iloc[0]['label']স্কেলারের পরিবর্তে একক মান অ্যারে পায় gets

এটার মত:

lastprice=stock.iloc[-1]['Close']

আউটপুট:

date
2014-02-26 118.2
name:Close, dtype: float64

আমি মনে করি এটি কেবল নকল এন্ট্রি সহ সিরিজের ক্ষেত্রে হওয়া উচিত ... বাস্তবে আমি এটি দেখতে পাচ্ছি না, আপনি কি এটি প্রদর্শনের জন্য একটি ছোট উদাহরণ দিতে পারেন?
অ্যান্ডি হেডেন

আমি পান্ডাস 13.x, উভয় আইলোক [] [] বা আইলোক [,] আউটপুট একটি স্কেলার ব্যবহার করেছি। ঠিক আইলোক নেতিবাচক সূচকের সাথে কাজ করছে না, যেমন -1
টাইমস্লোভ

আপনি যদি উত্তরের এই খেলায় একটি উদাহরণ দিতে পারেন তবে তা সত্যিই সহায়ক হবে!
অ্যান্ডি হেডেন

5

আমি যে দ্রুত / সহজ বিকল্পগুলি পেয়েছি সেগুলি নীচে রয়েছে। 501 সারি সূচকে উপস্থাপন করে।

df.at[501,'column_name']
df.get_value(501,'column_name')

5
get_valueএখন অবহিত করা হয়েছে (v0.21.0 আরসি 1 (অক্টোবর 13, 2017)) রেফারেন্সটি এখানে রয়েছে .get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
শিহে ঝাং

4

ilocপান্ডাস ০.১০ এর জন্য যেখানে অপরিবর্তনীয় নয়, সেখানে একটি ফিল্টার করুন DFএবং কলামটির জন্য প্রথম সারির ডেটা পান VALUE:

df_filt = df[df['C1'] == C1val & df['C2'] == C2val]
result = df_filt.get_value(df_filt.index[0],'VALUE')

যদি আরও 1 টি সারি ফিল্টার করা থাকে তবে প্রথম সারির মানটি পান। যদি ফিল্টারটি খালি ডেটা ফ্রেমের ফলাফল দেয় তবে সেখানে ব্যতিক্রম হবে।


3
get_valueএখন অবহিত করা হয়েছে (v0.21.0 আরসি 1 (অক্টোবর 13, 2017)) রেফারেন্সটি এখানে রয়েছে .get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
শিহে ঝাং

কিন্তু iatবা atকলামের নামের উপর ভিত্তি করে মান পেতে পারে না।
শিববধু

4

এটি একটি ভাল অনুশীলন কিনা তা নিশ্চিত নয় তবে আমি লক্ষ্য করেছি যে সিরিজটি castালাইয়ের মাধ্যমে আমি ঠিক মানটিও পেতে পারি float

যেমন

rate

3 0.042679

নাম: বেকারত্ব_রেটি, টাইপ: ফ্লোট 64

float(rate)

0.0426789


এটি একটি বহু-উপাদান সিরিজের পাশাপাশি কাজ করে?
প্রেক্সাইটেলস


-1
df_gdp.columns

সূচক ([u'Country ', u'Country Code', u'Indicator নাম ', u'Indicator কোড', u'1960 ', u'1961', u'1962 ', u'1963', u'1964 ' , u'1965 ', u'1966', u'1967 ', u'1968', u'1969 ', u'1970', u'1971 ', u'1972', u'1973 ', u'1974' , u'1975 ', u'1976', u'1977 ', u'1978', u'1979 ', u'1980', u'1981 ', u'1982', u'1983 ', u'1984' , u'1985 ', u'1986', u'1987 ', u'1988', u'1989 ', u'1990', u'1991 ', u'1992', u'1993 ', u'1994' , u'1995 ', u'1996', u'1997 ', u'1998', u'1999 ', u'2000',u'2001 ', u'2002', u'2003 ', u'2004', u'2005 ', u'2006', u'2007 ', u'2008', u'2009 ', u'2010', u'2011 ', u'2012', u'2013 ', u'2014', u'2015 ', u'2016'], dtype = 'অবজেক্ট')

df_gdp[df_gdp["Country Code"] == "USA"]["1996"].values[0]

8100000000000,0


4
এটি একটি উত্তর বা একটি প্রশ্ন?
ভেগা

4
স্ট্যাক ওভারফ্লোতে স্বাগতম! কোড স্নিপেটের জন্য আপনাকে ধন্যবাদ, যা কিছু সীমিত, তাত্ক্ষণিক সহায়তা সরবরাহ করতে পারে। একটি সঠিক ব্যাখ্যা কেন এটি সমস্যার একটি ভাল সমাধান, তা বর্ণনা করে এর দীর্ঘমেয়াদী মানকে ব্যাপকভাবে উন্নতি করবে এবং অন্যান্য অনুরূপ প্রশ্নের সাথে ভবিষ্যতের পাঠকদের জন্য আরও দরকারী করে তুলবে। আপনার অনুমানগুলি সহ কিছু ব্যাখ্যা যুক্ত করতে দয়া করে আপনার উত্তরটি সম্পাদনা করুন।
sepehr

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