Pandas(或Excel)查找搜索键并获取值
Pandas (or Excel) find Search Key and get Value
我有一个 Excel 文件,我用 pandas 读入数据框。
在这个 Excel 文件中是不同的键值对。
我想搜索键并获取值(具有行 and/or 列偏移量)
到目前为止,这是我的代码(带有示例数据框):
import json
import pandas as pd
def SearchValues(df,str_search,r_offset,c_offset):
print(df[df.eq(str_search).any(1)])
#return Value
data = {'Unnamed: 1': ['', ''],
'Unnamed: 2': ['', 'Key1'],
'Unnamed: 3': ['', ''],
'Unnamed: 4': ['', 'Value1'],
'Unnamed: n': ['Key2', 'Value2'],
}
df = pd.DataFrame(data)
SearchValues(df,'Key1',0,2) #=> result= Value1
SearchValues(df,'Key2',1,0) #=> result= Value2
我在搜索功能上很挣扎。这是一种可能的方法吗?如果是,我该如何进行?
或者有没有其他选择。也许没有数据框可以直接在 Excel 文件中搜索。
您可以将索引重置为具有数值范围,然后使用堆叠的 DataFrame 来识别第一个匹配项并获取索引,然后在添加偏移量后切片:
def SearchValues(df, str_search, r_offset, c_offset):
# reset the index/columns to be a numerical range
df = df.set_axis(range(df.shape[1]), axis=1).reset_index(drop=True)
# find the row/col coordinates of the first match
r,c = df.eq(str_search).stack().idxmax()
# add the offsets and slice based on position
return df.loc[r+r_offset, c+c_offset]
SearchValues(df, 'Key1', 0, 2)
# 'Value1'
SearchValues(df, 'Key2', 1, 0)
# 'Value2'
注意。这不处理偏移量使其溢出 DataFrame 尺寸的情况,但是使用 df.shape
添加检查非常容易
我有一个 Excel 文件,我用 pandas 读入数据框。 在这个 Excel 文件中是不同的键值对。
我想搜索键并获取值(具有行 and/or 列偏移量)
到目前为止,这是我的代码(带有示例数据框):
import json
import pandas as pd
def SearchValues(df,str_search,r_offset,c_offset):
print(df[df.eq(str_search).any(1)])
#return Value
data = {'Unnamed: 1': ['', ''],
'Unnamed: 2': ['', 'Key1'],
'Unnamed: 3': ['', ''],
'Unnamed: 4': ['', 'Value1'],
'Unnamed: n': ['Key2', 'Value2'],
}
df = pd.DataFrame(data)
SearchValues(df,'Key1',0,2) #=> result= Value1
SearchValues(df,'Key2',1,0) #=> result= Value2
我在搜索功能上很挣扎。这是一种可能的方法吗?如果是,我该如何进行? 或者有没有其他选择。也许没有数据框可以直接在 Excel 文件中搜索。
您可以将索引重置为具有数值范围,然后使用堆叠的 DataFrame 来识别第一个匹配项并获取索引,然后在添加偏移量后切片:
def SearchValues(df, str_search, r_offset, c_offset):
# reset the index/columns to be a numerical range
df = df.set_axis(range(df.shape[1]), axis=1).reset_index(drop=True)
# find the row/col coordinates of the first match
r,c = df.eq(str_search).stack().idxmax()
# add the offsets and slice based on position
return df.loc[r+r_offset, c+c_offset]
SearchValues(df, 'Key1', 0, 2)
# 'Value1'
SearchValues(df, 'Key2', 1, 0)
# 'Value2'
注意。这不处理偏移量使其溢出 DataFrame 尺寸的情况,但是使用 df.shape