熊猫:从ID中获取行,该ID是列值的拆分

时间:2019-05-20 11:15:27

标签: python pandas

我有一个熊猫DataFrame df,其中包含文件名列表。

这里是一个示例:

print(df)

>>
+---------+---------+
|       ID|    Field|
+---------+---------+
|  AAA.png|        X|
|  BBB.jpg|        Y|
|  CCC.png|        Z|
+---------+---------+

我要从给定的ID(不带扩展名的文件名)中检索列Field的值。

例如,对于my_id = BBB,我想获取值Y

为此,我尝试了以下操作:

my_id = BBB
field_value = df[df["ID"].str.split('.')[0] == my_id]["Field"]

但是出现错误KeyError: False。我理解为什么会有这个错误,但是我不知道如何以其他方式做到这一点。

3 个答案:

答案 0 :(得分:3)

boolean indexingDataFrame.loc进行的第一个过滤器-输出为Series

field_value = df.loc[df["ID"].str.split('.').str[0] == my_id, "Field"]

然后将第一个值与next一起使用iter

first val = next(iter(field_value), 'no match')

如果需要列表中所有匹配的值:

L = field_value.tolist()

答案 1 :(得分:1)

我用str.contains测试过:

Task

您可以看到它可以返回多个值。同样,它是my_id="BBB" field_values = df.loc[df["ID"].str.contains(my_id), "Field"] print(field_values) 开头的文件名的公告符号,例如.


.AAA.png

答案 2 :(得分:0)

使用os.path.splitext

例如:

import os
import pandas as pd

df = pd.DataFrame({"ID": ["AAA.png", "BBB.png", "CCC.png"],
                   "Field": ["X", "Y", "Z"]})

my_id = "BBB"
mask = df["ID"].apply(os.path.splitext).str[0] == my_id
print(df[mask]["Field"])

输出:

1    Y
Name: Field, dtype: object