The Python Oracle

How to get a value from a Pandas DataFrame and not the index and object type

--------------------------------------------------
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------

Music by Eric Matyas
https://www.soundimage.org
Track title: Hypnotic Puzzle3

--

Chapters
00:00 How To Get A Value From A Pandas Dataframe And Not The Index And Object Type
00:35 Accepted Answer Score 251
01:01 Answer 2 Score 95
01:30 Answer 3 Score 4
01:46 Answer 4 Score 4
02:06 Answer 5 Score 1
02:17 Thank you

--

Full question
https://stackoverflow.com/questions/3078...

--

Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...

--

Tags
#python #pandas #dataframe

#avk47



ACCEPTED ANSWER

Score 252


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

This returns the first element in the Index/Series returned from that selection. In this case, the value is always the first element.

EDIT:

Or you can run a loc() and access the first element that way. This was shorter and is the way I have implemented it in the past.




ANSWER 2

Score 95


Use the values attribute to return the values as a np array and then use [0] to get the first value:

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

Out[4]:
'C'

EDIT

I personally prefer to access the columns using subscript operators:

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

This avoids issues where the column names can have spaces or dashes - which mean that accessing using ..




ANSWER 3

Score 4


import pandas as pd

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

>>> values[0]
'item_0'

edit:

actually, you can just index the dataset like any old array.

import pandas as pd

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

>>> print(first_value)
'item_0'



ANSWER 4

Score 4


You can use loc with the index and column labels.

df.loc[2, 'Letters']
# 'C'

If you prefer the "Numbers" column as reference, you can set it as index.

df.set_index('Numbers').loc[3, 'Letters']

I find this cleaner as it does not need the [0] or .item().