#python #pandas
#python #панды
Вопрос:
Я пытаюсь заставить «кластер» читать одну за другой базу фрейма данных ниже, но я не смог добраться до этого, я for
тоже пытаюсь использовать, но я все еще не могу получить то, что ожидал. Поэтому я пытаюсь использовать этот метод и получаю эту ошибку. Я надеюсь, что вы, ребята, сможете дать несколько идей по устранению этой ошибки.
from scipy import constants
from qconstants import *
import os.path
import pandas as pd
cluster = 'A2142'
cluster = 'A2744'
cluster = 'A2199'
cluster = 'A119'
################ List of Cluster##################################################################
d1=pd.DataFrame.from_items([
('A2142' ,['A2142' ,'MH',0.0909 ,418600 ,23 ,129 ,0.57 ,0.810 ,5.82 ,10.0 ,0.5 ,6189.32 ,510 ,2000]),
('A2744' ,['A2744' ,'RH',0.3080 , 28840, 218, 115, 7.7, 0.680, 10.8, 10.0, 0.5, 920.667, 1360, 1100]),
('A2199' ,['A2199' ,'RH',0.0302 , 127000 ,250 , 99.3, 2.0, 0.655, 10.1, 11.7, 0.9, 14655.02, 180, 1000.0]),
('A119' ,['A119' ,'RH',0.0440 ,832000, 243 , 357.9, 5.8, 0.675, 0.15, 7.5, 0.9, 5627.63, 5770, 1100.0])],
orient='index',columns=['Label','type','redshift','DL','S_nu','r_c_dum','T_gas_dum','beta','n0','B_dum','eta','rho_s','r_s','r'])
############################# Set and decide the constants start ##################################################
#Hubble constants
h =0.7 #little h. unit : -
#Critical density:
sigm =0.3 #matter density. unit : -
sigl =0.7 #dark energy density. unit : -
sig8 =0.829
#Properties of cluster:
redshift =d1.loc[cluster,'redshift']
DL =d1.loc[cluster,'DL']*kpc*100.0 # luminosity distance, in unit of cm. z=0.0302
#DA =100000*kpc*100.0
S_nu =d1.loc[cluster,'S_nu'] #mJy
r_c_dum =d1.loc[cluster,'r_c_dum'] #Core radius. unit : h50^-1 kpc, where H0=50 kms^-1Mpc^-1
T_gas_dum =d1.loc[cluster,'T_gas_dum'] #T_gas in unit of keV
beta =d1.loc[cluster,'beta'] #Beta parameter. unit : -
n0 =d1.loc[cluster,'n0'] #Thermal electron central density #unit : cm^-3. Aamp;A 540, A38 (2012)
B_dum =d1.loc[cluster,'B_dum'] #central magnetic field. #unit : Gauss. Aamp;A 540, A38 (2012)
eta =d1.loc[cluster,'eta'] #proportional coefficient related to magnetic field profile
#Temperature of CMB at any redshift z. (want ot know more? See http://www.cv.nrao.edu/course/astr534/CMB.html)
T =T0*(1.0 redshift)
#conversion if necessary
B0 =B_dum*(10**-6)
H_0 =100.0*h #hubble constant. unit : km s^-1 Mpc^-1
H_0m =H_0/(1000.0*si_pc) #hubble constant. unit : s^-1
Ez =np.sqrt(sigm*(1.0 redshift)**3 sigl)
Hz =H_0m*Ez #H(z). unit : s^-1
rho_crit=3.0*Hz**2/(8.0*constants.pi*si_G) #critical density. unit : kg m^-3
T_gas =T_gas_dum*1000.0*si_e/si_k #T_gas in unit of Kelvin
r_c_dum2=r_c_dum*0.5/h #Core radius. unit : kpc, where h=0.673
r_c =r_c_dum2*1000.0*si_pc*100.0 #Core radius. unit : cm
############################# Set and decide the constants end ####################################################
############################# start: parameters for nfw profile ####################################################
#characteristic density in unit of kg m^-3 ( multiplied by rho_crit )
rho_s=d1.loc[cluster,'rho_s']*rho_crit
#characteristic radius in unit of meter
r_s= kpc*d1.loc[cluster,'r_s']
r=kpc*d1.loc[cluster,'r']
############################# end: parameters for nfw profile ####################################################```
Комментарии:
1. функция from_items() устарела в новых python… используйте dict().
Ответ №1:
Проблема не очень хорошо написана.
Кажется, вы пытаетесь выполнить некоторые вычисления per row
(вы вызываете cluster). Или ты пытаешься что — то сделать N row computation
?
Конечный желаемый результат не ясен? Что такое nfw profile
?
Вы пытаетесь построить дополнительные столбцы? или получить какие-то преобразованные данные?
Ниже приведен код, переписанный с использованием df.apply() для выполнения вычислений для каждой строки, чтобы показать вычисления для каждой строки. ( more clean up work is needed
)
В коде отсутствует несколько элементов, поэтому я по умолчанию установил для них значение 1.0 T0=1.0, si_pc = 1.0, si_G = 1.0, si_e = 1.0, si_k = 1.0, kpc=1.0, rho=1.0
.
Пример создания фрейма данных
import numpy as np
items= [
('A2142' ,['A2142' ,'MH',0.0909 ,418600 ,23 ,129 ,0.57 ,0.810 ,5.82 ,10.0 ,0.5 ,6189.32 ,510 ,2000]),
('A2744' ,['A2744' ,'RH',0.3080 , 28840, 218, 115, 7.7, 0.680, 10.8, 10.0, 0.5, 920.667, 1360, 1100]),
('A2199' ,['A2199' ,'RH',0.0302 , 127000 ,250 , 99.3, 2.0, 0.655, 10.1, 11.7, 0.9, 14655.02, 180, 1000.0]),
('A119' ,['A119' ,'RH',0.0440 ,832000, 243 , 357.9, 5.8, 0.675, 0.15, 7.5, 0.9, 5627.63, 5770, 1100.0])]
d1 = pd.DataFrame.from_dict({k:v for k,v in items},
orient='index',columns=['Label','type','redshift','DL','S_nu','r_c_dum','T_gas_dum','beta','n0','B_dum','eta','rho_s','r_s','r'])
perRow
— Функция для применения к строке
def perRow(r, T0=1.0, si_pc = 1.0, si_G = 1.0, si_e = 1.0, si_k = 1.0, kpc=1.0, rho=1.0):
############################# Set and decide the constants start ##################################################
#Hubble constants
h =0.7 #little h. unit : -
#Critical density:
sigm =0.3 #matter density. unit : -
sigl =0.7 #dark energy density. unit : -
sig8 =0.829
#Properties of cluster:
#redshift = r.redshift
#DL = r.DL *kpc*100.0 # luminosity distance, in unit of cm. z=0.0302
#DA =100000*kpc*100.0
#S_nu =r.S_nu
#r_c_dum = r.r_c_dum #Core radius. unit : h50^-1 kpc, where H0=50 kms^-1Mpc^-1
#T_gas_dum = r.T_gas_dum #T_gas in unit of keV
#beta = r.beta #Beta parameter. unit : -
#n0 = r.n0 #Thermal electron central density #unit : cm^-3. Aamp;A 540, A38 (2012)
#B_dum = r.B_dum #central magnetic field. #unit : Gauss. Aamp;A 540, A38 (2012)
#eta = r.eta #proportional coefficient related to magnetic field profile
#Temperature of CMB at any redshift z. (want ot know more? See http://www.cv.nrao.edu/course/astr534/CMB.html)
T =T0*(1.0 r.redshift)
#conversion if necessary
B0 = r.B_dum*(10**-6)
H_0 =100.0*h #hubble constant. unit : km s^-1 Mpc^-1
H_0m =H_0/(1000.0*si_pc) #hubble constant. unit : s^-1
Ez =np.sqrt(sigm*(1.0 r.redshift)**3 sigl)
Hz =H_0m*Ez #H(z). unit : s^-1
# FIXME: used np.pi instead of constants.pi
rho_crit=3.0*Hz**2/(8.0*np.pi*si_G) #critical density. unit : kg m^-3
T_gas = r.T_gas_dum*1000.0*si_e/si_k #T_gas in unit of Kelvin
r_c_dum2= r.r_c_dum*0.5/h #Core radius. unit : kpc, where h=0.673
r_c = r_c_dum2*1000.0*si_pc*100.0 #Core radius. unit : cm
############################# Set and decide the constants end ####################################################
############################# start: parameters for nfw profile ####################################################
#characteristic density in unit of kg m^-3 ( multiplied by rho_crit )
rho_s= r.rho_s*rho_crit
#characteristic radius in unit of meter
r_s= kpc* r.r_s
r=kpc*r.r
############################# end: parameters for nfw profile ####################################################```
nfw_profile = [rho_s, r_s, r]
return(nfw_profile)
Применяется perRow()
к каждой строке фрейма данных d1.
print("n NFW PROFILE [rho_s, r_s, r]")
print(d1.apply(lambda r: perRow(r),axis=1))
ВЫВОД
NFW PROFILE [rho_s, r_s, r]
A2142 [3.943995655495191, 510.0, 2000.0]
A2744 [0.7384586065967704, 1360.0, 1100.0]
A2199 [8.811723258555253, 180.0, 1000.0]
A119 [3.427734855427434, 5770.0, 1100.0]
dtype: object