pandas 如何在数组中创建具有名称的对象?

hc2pp10m  于 2023-03-21  发布在  其他
关注(0)|答案(1)|浏览(171)

在一个数组中,我有周期表元素的符号,我有另一个数组中的所有属性。
我想用每个符号创建一个对象,并使用另一个数组的属性。
使用此csv:https://gist.github.com/GoodmanSciences/c2dd862cd38f21b0ad36b8f96b4bf1ee#file-periodic-table-of-elements-csv
我已经试过了:

import pandas as pd

file = '/path/to/file/PeriodicTableofElements.csv'
df = pd.read_csv(file)

class Elemento:
    def __init__(self, NumAtomico, Elemento, Simbolo, MassAtomica, Neutrones, Protones, Electrones, Periodo, Grupo, Fase, radioctividad, Natural, Metal, NoMetal, Metaloide, Tipo, RadioAtomico, electronegatividad, PrimeraIonizacion, densidad, Fusion, Evaporacion, CantIsotopos, Descubridor, Año, CalorEspecifico, NumOrbitas, NumVale ):
        self.NumAtomico = NumAtomico
        self.Elemento = Elemento
        self.Simbolo = Simbolo
        self.MassAtomica = MassAtomica
        self.Neutrones = Neutrones
        self.Protones = Protones
        self.Electrones = Electrones
        self.Periodo = Periodo
        self.Grupo = Grupo
        self.Fase = Fase
        self.radioctividad = radioctividad
        self.Natural = Natural
        self.Metal = Metal
        self.NoMetal = NoMetal
        self.Metaloide = Metaloide
        self.Tipo = Tipo
        self.RadioAtomico = RadioAtomico
        self.electronegatividad = electronegatividad
        self.PrimeraIonizacion = PrimeraIonizacion
        self.densidad = densidad
        self.Fusion = Fusion
        self.Evaporacion = Evaporacion
        self.CantIsotopos = CantIsotopos
        self.Descubridor = Descubridor
        self.Año = Año
        self.CalorEspecifico = CalorEspecifico
        self.NumOrbitas = NumOrbitas
        self.NumVale = NumVale
    def CrearElemento(ListaAtributos):
        return Elemento(*ListaAtributos)

simbolo = df['Symbol'].to_list()

H = Elemento.CrearElemento(df.iloc[0].to_list())

我正在尝试用元素的不同符号制作一个对象,我想调用像H.NumAtomico这样的对象,程序输出元素的原子序数。谢谢!!!

iszxjhcz

iszxjhcz1#

一个重要的问题是为与元素符号相关的类示例创建名称。请参阅下面的代码,它解决了这个问题,并演示了使用简化的数据集来实现我认为你想要的。它可以扩展到你的数据集。

import pandas as pd

df = pd.DataFrame({'symbol': ['H', 'He'],
                   'atomicNo': [1, 2],
                   'atomicMass': [ 1.007,4.002]})

symbols = df['symbol'].tolist()

df= df.set_index('symbol')

class Elements():
    def __init__(self,aNo,aMass):
        self.atomicNo = aNo
        self.atomicMass = aMass
        
for symbol in symbols:   #this creates a class instance for each symbol
    globals()[symbol] = Elements(df.loc[symbol, 'atomicNo'], df.loc[symbol, 'atomicMass'])
    
print(H.atomicNo)
print(He.atomicNo)
print(H.atomicMass)
print(He.atomicMass)

其给出:

1
2
1.007
4.002

相关问题