python - 有没有一种简单的方法可以在熊猫数据框中找到元素的“坐标”?
问题描述
我有一个数据框“ptable”,如下所示:
我们得到了一项非常简单的任务,即在数据框中找到一个值,即氩气的沸点。他们的示例解决方案是简单地执行此操作(这是化学家的计算机科学非常基础的课程):
print(ptable.loc[17, 'BoilingPoint'])
在我看来,这不是一个很好的解决方案,因为它需要知道您正在查找的值的索引(在这种情况下很简单,因为它只是原子序数减一,但将来可能会更加乏味。
我尝试编写一个快速函数来尝试使其更具前瞻性,或者在类似的数据帧上工作:
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 函数,我可以使用注释掉的“列”变量。
理想的函数将能够将元素作为原子序数、名称或符号,并产生所要求的任何属性。
有没有更好的方法来解决这个问题,这样就不需要对数据框结构的深入了解?
解决方案
这是我的解决方案:
import pandas as pd
def locate(data, query, value, output):
df = pd.DataFrame(data = data)
# create a list of values in the query (column)
values = df[query].tolist()
row = 0
if value in values:
row = values.index(value)
return df.loc[row, output]
输入数据如下所示:
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],
}
value = locate(data=d, query='Symbol', value='He', output='BoilingPoint')
输出:
4.22
查询基本上是您传入的值所在的列。例如,我将查询指定为“Symbol”,然后传入属于该查询的值(“He”)。输出就是您希望输出的数据类型。我想要 He 的沸点,所以我传入“BoilingPoint”作为输出参数。
当然,您也可以像这样调用函数,而无需显式编写参数。
locate(d, 'Symbol', 'He', 'BoilingPoint')
但是,由于所有参数彼此相似,因此如果显式设置每个参数,可读性会提高。
推荐阅读
- android - AAPT:错误:找不到资源可绘制/示例(又名 com.app:drawable/example)
- azure - WCF Azure 应用服务随机失败并出现 ConfigurationErrorsException
- prolog - Prolog如何从许多选项中获得最大选项
- wordpress - 联系表格 7 日期占位符
- r - 循环单向方差分析:如何遍历数据框的多列?
- import - 从 jupyter notebook 调用 julia 函数(导入 Julia jupyter notebook)
- excel - 如何删除同一 Excel 单元格中存在的重复单词实例?
- sql - sql/vba 中 where 子句的第二部分有
- typescript - Chromium / typescript 期待不同位置的源地图
- reactjs - 如何使用 useState() 钩子和 history.push() 将状态传递给另一个组件