Python 有没有找到';坐标';数据帧中某个元素的?

Python 有没有找到';坐标';数据帧中某个元素的?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧“ptable”,它看起来像这样: 我们得到了一个非常简单的任务,在数据框中找到一个值,氩的沸点。他们的样品溶液就是这样做的(这是化学家计算机科学的一门非常基础的课程): 在我看来,这不是一个很好的解决方案,因为它需要知道您正在查找的值的索引(在本例中很简单,因为它只是原子序数减1,但将来可能会更乏味) 我试图编写一个快速函数,使其更适合未来使用,或处理类似的数据帧: def element_data(element, property): row = (ptable.i

我有一个数据帧“ptable”,它看起来像这样:

我们得到了一个非常简单的任务,在数据框中找到一个值,氩的沸点。他们的样品溶液就是这样做的(这是化学家计算机科学的一门非常基础的课程):

在我看来,这不是一个很好的解决方案,因为它需要知道您正在查找的值的索引(在本例中很简单,因为它只是原子序数减1,但将来可能会更乏味)

我试图编写一个快速函数,使其更适合未来使用,或处理类似的数据帧:

def element_data(element, property):
    row = (ptable.index[ptable['Element'] == element])[0]
    #column = ptable.columns.get_loc(property)
    print(ptable.loc[row, property])
element_data('Argon', 'BoilingPoint')
这可以很好地工作,但只能在这个特定的数据帧上工作,我对查找行的索引的实现不满意,因为它看起来非常不雅观。我还想知道是否有一个pandas函数可以用来使用注释掉的'column'变量

理想的函数可以将元素作为原子序数、名称或符号,并生成所需的任何属性

有没有更好的方法来解决这个问题,这样就不需要深入了解数据帧的结构了?

以下是我的解决方案:

将熊猫作为pd导入
def定位(数据、查询、值、输出):
df=pd.DataFrame(data=data)
#在查询(列)中创建值列表
values=df[query].tolist()
行=0
如果值中有值:
行=值。索引(值)
返回df.loc[行,输出]
其中输入数据如下所示:

d={
“原子数”:[1,2,3,4,5],
“元素”:[“氢”、“氦”、“锂”、“铍”、“硼”],
‘Symbol’:[‘H’、‘He’、‘Li’、‘Be’、‘B’],
“沸点”:[20.28,4.22,1615.00,2742.00,4200.00],
}
value=locate(data=d,query='Symbol',value='He',output='BoilingPoint')
输出:

4.22
查询基本上是您传入的值所在的列。例如,我将查询指定为“Symbol”,然后传入属于该查询的值(“He”)。输出只是您希望输出的数据类型。我想要He的沸点,因此我传入了“BoilingPoint”作为输出参数

当然,您也可以这样调用函数,而无需显式地编写参数

locate(d, 'Symbol', 'He', 'BoilingPoint')
但是,由于所有参数彼此相似,如果显式设置每个参数,可读性就会提高。

我认为这更好,但我想指出,这种查询有一种语法

d = {
    'AtomicNumber': [1, 2, 3, 4, 5],
    'Element': ['Hydrogen', 'Helium', 'Lithium', 'Beryllium', 'Boron'],
    'Symbol': ['H', 'He', 'Li', 'Be', 'B'],
    'BoilingPoint': [20.28, 4.22, 1615.00, 2742.00, 4200.00],
}
df = pd.DataFrame(d)

df.query('Element == "Helium"')['BoilingPoint']
输出:


我不认为我可以要求更好的解决方案!非常感谢,我将对代码进行更多的注释,但您在代码中隐式地回答了我的所有问题!我不能+1,因为没有问题!您可以通过选择向上/向下投票下方的复选标记来接受答案吗?其他用户可能不知道您的问题已经解决。谢谢!
d = {
    'AtomicNumber': [1, 2, 3, 4, 5],
    'Element': ['Hydrogen', 'Helium', 'Lithium', 'Beryllium', 'Boron'],
    'Symbol': ['H', 'He', 'Li', 'Be', 'B'],
    'BoilingPoint': [20.28, 4.22, 1615.00, 2742.00, 4200.00],
}
df = pd.DataFrame(d)

df.query('Element == "Helium"')['BoilingPoint']
1    4.22
Name: BoilingPoint, dtype: float64