Dados podem ser importados usando-se o pacote pandas
, geralmente designado por pd
. Para tanto, é necessário importar o pacote (se o pacote não estiver instalado, é necessário instalar). Você pode encontrar informações sobre como instalar o pandas aqui.
Diversos métodos estão disponíveis para o pacote pandas (veja este site, ou este site). Dentre as funcionalidades do pandas, pode-se citar (ActiveState):
Vamos nos ater ao básico, a importação de dados do Excel para posterior uso.
O código abaixo ilustra como se pode importar dados de um arquivo de Excel usando o pandas.
Os valores podem ser acessados como listas com o método list( .values)
; os nomes das columas podem ser tomados a partir do método .columns
. Uma lista com as primeiras linhas da tabela pode ser vista com o método .head()
.
import pandas as pd
Dd = pd.read_excel(r'NomedoArquivo', sheet_name='NomedaPlanilha')
Dd.head() # para visualizar o cabeçalho
print(Dd.values) # para acessar os valores
print(Dd.columns) # para ter o nome das colunas
Exemplo
Suponnha então que se tenha um arquivo de Excel, com nome DadosTermodinamicos.xls
(baixe a planilha clicando aqui) contendo dados termodinâmicos de coeficiente de capacidade calorífica das fases líquidas e gás, como segue:
Composto | Fase | A | B*1e3 | C*1e6 | D*1e-5 | Fase.1 | A.1 | B*1e3.1 | C*1e6.1 | D*1e-5.1 |
---|---|---|---|---|---|---|---|---|---|---|
Metano | (G) | 1.702 | 9.081 | -2.164 | 0 | (L) | ||||
Etano | (G) | (L) | ||||||||
Propano | (G) | 1.213 | 28.785 | -8.824 | 0 | (L) | 8.399 | -8.9243 | 98.4277 | 0 |
Eteno | (G) | 1.424 | 14.394 | -4.392 | 0 | (L) | ||||
Propeno | (G) | 1.637 | 22.706 | -6.915 | 0 | (L) | ||||
Água | (G) | 3.47 | 1.45 | 0 | 0.121 | (L) | 8.712 | 1.25 | -0.18 | 0 |
Etanol | (G) | 3.518 | 20.001 | -6.002 | 0 | (L) | 33.866 | -172.6 | 349.17 | 0 |
Benzeno | (G) | -0.206 | 39.064 | -13.301 | 0 | (L) | -0.747 | 67.96 | 37.78 | 0 |
Tolueno | (G) | 0.29 | 47.052 | -15.716 | 0 | (L) | 15.133 | 137.08 | -84.73 | 0 |
Hidrogênio | (G) | 3.249 | 0.422 | 0 | 0.083 | (L) | ||||
CO | (G) | 3.376 | 0.557 | 0 | -0.031 | (L) | ||||
N2 | (G) | 3.28 | 0.593 | 0 | 0.04 | (L) | ||||
CO2 | (G) | 5.457 | 1.045 | 0 | -1.157 | (L) | ||||
Ciclo-Hexano | (G) | -3.876 | 63.2491 | -20.928 | 0 | (L) | -9.048 | 141.38 | -161.62 | 0 |
Metanol | (G) | 2.211 | 12.216 | -3.45 | 0 | (L) | 13.431 | -51.28 | 131.13 | 0 |
n-Hexano | (G) | (L) |
Fonte: Smith et al. (2007)
Em cada caso, a capacidade calorífica pode ser escrita como ($ T $ em Kelvin):
$$ Cp/R = A + B \cdot T + C \cdot T^2 + \frac{D}{T^2} $$O seguinte código permite a captura de dados.
import pandas as pd
Dd= pd.read_excel(r'DadosTermodinamicos.xlsx', sheet_name='Planilha1')
Dd.head() # imprime o cabeçalho
valores = list(Dd.values) # captura os valores
nomecol = Dd.columns # captura o nome das colunas
Suponha agora que se queira capturar os coeficientes disponíveis na tabela para o cálculo de Cp das fase gás e líquida. Se houver dados faltantes, criaremos um indicador que informa que não é possível o cálculo do Cp da fase. Vamos designar a variável ehcalcG
e ehcalcL
para gás e líquido, respectivamente, como um booleano (True
indica que é possível o cálculo e False
indica que os dados estão faltantes). A variável ehcalcG
será uma lista com a mesma dimensão do número de compostos.
Dd= pd.read_excel(r'DadosTermodinamicos.xlsx', sheet_name='Planilha1')
valores = Dd.values
nomecol = Dd.columns
#print(Dd.values)
#print(Dd.columns)
#Dd.head()
n = len(valores) # número de compostos
ehcalcG = [] # inicializa a análise se é calculável para o G
ehcalcL = [] # inicializa a análise se é calculável para o L
coefG = [] # coeficientes do Gás
coefL = []
for i in range(n):
# extrai a lista de coeficientes do gás
aux = list(valores[i][2:6])
# verifica se são NaN ou não
if any(type(i) == float and pd.isna(i) for i in aux):
# se são Nan, indica que não é calculável
ehcalcG.append(False)
coefG.append([])
else:
# se forem numéricos, adicione é calculável
ehcalcG.append(True)
coefG.append(aux)
# repete o procedimento para o líquido
# extrai a lista de coeficientes do líquido
aux = list(valores[i][7:11])
# verifica se são NaN ou não
if all(type(i) == float and pd.isna(i) for i in aux):
# se são Nan, indica que não é calculável
ehcalcL.append(False)
coefL.append([])
else:
# se forem numéricos, adicione é calculável
ehcalcL.append(True)
coefL.append(aux)
Suponha agora que para todos os compostos se queira calcular a capacidade calorífica a 310K. Isto pode ser feito com o código a seguir:
R = 8.314 # J/mol/K
T = 310 #K
CpG = [] #inicializa a lista de Cp do gás
CpL = [] #inicializa a lista de Cp do líquido
for i in range(n):
if ehcalcG[i]:
# se o gás for calculável, o calcula
CpG.append(R*(coefG[i][0] + 1e-3*coefG[i][1]*T + 1e-6*coefG[i][2]*T**2 + 1e5*coefG[i][3]/T**2))
else:
# se o gás não for calculável, acrescenta apenas um termo nulo
CpG.append([])
if ehcalcL[i]:
# se o líquido for calculável, o calcula
CpL.append(R*(coefL[i][0] + 1e-3*coefL[i][1]*T + 1e-6*coefL[i][2]*T**2 + 1e5*coefL[i][3]/T**2))
else:
# se o líquido não for calculável, acrescenta apenas um termo nulo
CpL.append([])
Que retorna os valores para o gás e líquido
a=[list(val[0] for val in valores),CpG,CpL]
print(a)
pd.DataFrame(a).transpose()
O resultado, para as capacidades caloríficas a 310K estão apresentados a seguir
Composto | Cp Gás (J/mol/K) | Cp Líq (J/mol/K) | |
---|---|---|---|
0 | Metano | 35,826269774400004 | [] |
1 | Etano | [] | [] |
2 | Propano | 77,2234549704 | 125,46964161657998 |
3 | Eteno | 45,42826800319999 | [] |
4 | Propeno | 66,606185149 | [] |
5 | Água | 33,63354297918835 | 75,509427428 |
6 | Etanol | 76,0025789892 | 115,69128041799998 |
7 | Benzeno | 88,3413539646 | 199,130759012 |
8 | Tolueno | 111,12336429359999 | 411,42034355800007 |
9 | Hidrogênio | 28,817890077294486 | [] |
10 | CO | 29,235448831612903 | [] |
11 | N2 | 29,14433881146722 | [] |
12 | CO2 | 38,053142961810615 | [] |
13 | Ciclo-Hexano | 114,0684142228 | 160,02885305200004 |
14 | Metanol | 47,11057430999999 | 84,268983002 |
15 | n-Hexano | [] | [] |