在字典列表中查找值

时间:2021-02-23 08:00:35

标签: python pandas dataframe

我导入了一个包含我的数据的 .json 列表,将其转换为字典列表。

键是列标题。对于某个键的给定值,我想获取同一字典中另一个键的值。

data = [

   {
   "Nr.": 2,
   "Table data": "S - Sulfur",
   "Ref.": 571,
   "Formula": "S",
   "Name": "Sulfur",
 },
 {
   "Nr.": 3,
   "Table data": "HF - Hydrogen Fluoride",
   "Ref.": 556,
   "Formula": "HF",
   "Name": "Hydrogen Fluoride",
 },
 {
   "Nr.": 4,
   "Table data": "N2 - Nitrogen",
   "Ref.": 5,
   "Formula": "N2",
   "Name": "Nitrogen",
 },
]

例如,给定用户输入“氮”,我想检索键“公式”的值,即“N2。

我会将字典列表转换为数据框,然后使用查找方法。

import pandas

data = pandas.read_json("file.json")

df = pandas.DataFrame(data,
                      columns=('Nr.', 'Table data','Ref','Formula','Name'))

df['Formula'] = df.lookup(df.index,df['Nitrogen'])

但是,将字符串与此数据框中的值匹配似乎每次都会给出 KeyError。

2 个答案:

答案 0 :(得分:0)

您可以在数据框中的特定列上使用 str.match,例如,

s= input()
df["Table data"].str.match(f".*{s}.*")

答案 1 :(得分:0)

如果要将列值与多个元素进行匹配,则可以使用 isin

df = pandas.DataFrame(data,
                      columns=('Nr.', 'Table data','Ref','Formula','Name'))

inp_list = ['Nitrogen', 'Sulfur']
out = df[df.Name.isin(inp_list)]
print(out['Formula'])

输出:

0     S
2    N2

另外,请注意 DataFrame.lookup 已被弃用,您应该改用 DataFrame.meltDataFrame.loc