简体   繁体   中英

Pandas Dataframe selecting a single value each row

I want to have access to an element inside a panda dataframe, my df looks like below

index A B
0 3, 2, 1 5, 6, 7
1 3, 2, 1 5, 6, 7
2 3, 2, 1 5, 6, 7

I want to print from A the second value for every index for example, the problem I don't know how to select them.

Output should be

(2,2,2)

Assuming "3, 2, 1" is a list, you can do this with :

df.A.apply(lambda x: x[1])

if this is a string, you can do this with :

df.A.apply(lambda x: x.split(", ")[1])

If the entries in A are a non-string iterable (like a list or tuple , eg), you can use pandas string indexing:

df['A'].str[1]

Full example:

>>> import pandas as pd

>>> a = (3, 2, 1)
>>> df = pd.DataFrame([[a], [a], [a]], columns=['A'])
>>> df
           A
0  (3, 2, 1)
1  (3, 2, 1)
2  (3, 2, 1)

>>> df['A'].str[1]
0    2
1    2
2    2
Name: A, dtype: int64

If the entries are strings, you can use pandas string methods to split them into a list and apply the same approach above:

>>> import pandas as pd

>>> a = '3,2,1'
>>> df = pd.DataFrame([[a], [a], [a]], columns=['A'])
>>> df
       A
0  3,2,1
1  3,2,1
2  3,2,1

>>> df['A'].str.split(',').str[1]
0    2
1    2
2    2
Name: A, dtype: object

If column A contain string values:

import pandas as pd


data = {
    "A" :["3, 2, 1","3, 2, 1", "3, 2, 1"],
    "B" : ["5, 6, 7", "5, 6, 7", "5, 6, 7"]
}
df = pd.DataFrame(data)
output = df["A"].apply(lambda x:  (x.split(",")[1]).strip()).to_list()

print(output)

Result:

['2', '2', '2']

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM