Welcome to mendeleev’s documentation¶

This package provides an API for accessing various properties of elements from the periodic table of elements.

Getting started¶
Overview¶
This package provides an API for accessing various properties of elements from the periodic table of elements.
The repository is hosted on github.
Contributing¶
All contributions are welcome!
If you would like to suggest an improvement or report a bug or data inconsistency please consider creating an issue on github. I would be especially grateful for references to possible data updates and sources and recommendations of new data.
Citing¶
If you use mendeleev in a scientific publication, please consider citing the software as
Here’s the reference in the BibLaTeX format
@software{mendeleev2014,
author = {Mentel, Łukasz},
title = {{mendeleev} -- A Python resource for properties of chemical elements, ions and isotopes},
url = {https://github.com/lmmentel/mendeleev},
version = {0.15.0},
date = {2014--},
}
or the older BibTeX format
@misc{mendeleev2014,
auhor = {Mentel, Łukasz},
title = {mendeleev} -- A Python resource for properties of chemical elements, ions and isotopes, ver. 0.15.0},
howpublished = {\url{https://github.com/lmmentel/mendeleev}},
year = {2014--},
}
Funding¶
This project is supported by the RCN (The Research Council of Norway) project number 239193.
Installation¶
The package can be installed using pip
pip install mendeleev
You can also install the most recent version from the repository:
pip install git+https://github.com/lmmentel/mendeleev.git
If you use conda you can install the package from my anaconda channel by
conda install -c lmmentel mendeleev=0.15.0
Tutorials¶
Quick start¶
This simple tutorial will illustrate the basic capabilities of the package.
Table of Contents¶
Basic interactive usage¶
Getting single elements¶
The simplest way of accessing the elements is importing them directly from mendeleev
by symbols
[1]:
from mendeleev import Si, Fe, O
print("Si's name: ", Si.name)
print("Fe's atomic number:", Fe.atomic_number)
print("O's atomic weight: ", O.atomic_weight)
Si's name: Silicon
Fe's atomic number: 26
O's atomic weight: 15.999
An alternative interface to the data is through the element
function that returns a single Element
object or a list of Element
object depending on the arguments.
The function can be imported directly from the mendeleev
package
[2]:
from mendeleev import element
The element
method accepts unique identifiers: atomic number, atomic symbol or element’s name in English. To retrieve the entries on Silicon by symbol type
[3]:
si = element('Si')
[4]:
si
[4]:
Element(
abundance_crust=282000.0,
abundance_sea=2.2,
annotation='',
atomic_number=14,
atomic_radius=110.0,
atomic_radius_rahm=231.99999999999997,
atomic_volume=12.1,
atomic_weight=28.085,
atomic_weight_uncertainty=None,
block='p',
c6=305.0,
c6_gb=308.0,
cas='7440-21-3',
covalent_radius_bragg=117.0,
covalent_radius_cordero=111.00000000000001,
covalent_radius_pyykko=115.99999999999999,
covalent_radius_pyykko_double=107.0,
covalent_radius_pyykko_triple=102.0,
cpk_color='#daa520',
density=2.3296,
description="Metalloid element belonging to group 14 of the periodic table. It is the second most abundant element in the Earth's crust, making up 25.7% of it by weight. Chemically less reactive than carbon. First identified by Lavoisier in 1787 and first isolated in 1823 by Berzelius.",
dipole_polarizability=37.3,
dipole_polarizability_unc=0.7,
discoverers='Jöns Berzelius',
discovery_location='Sweden',
discovery_year=1824,
ec=<ElectronicConfiguration(conf="1s2 2s2 2p6 3s2 3p2")>,
econf='[Ne] 3s2 3p2',
electron_affinity=1.3895211,
en_allen=11.33,
en_ghosh=0.178503,
en_pauling=1.9,
evaporation_heat=383.0,
fusion_heat=50.6,
gas_basicity=814.1,
geochemical_class='major',
glawe_number=85,
goldschmidt_class='litophile',
group=<Group(symbol=IVA, name=Carbon group)>,
group_id=14,
heat_of_formation=450.0,
ionic_radii=[IonicRadius(
atomic_number=14,
charge=4,
coordination='IV',
crystal_radius=40.0,
econf='2p6',
id=379,
ionic_radius=26.0,
most_reliable=True,
origin='',
spin='',
), IonicRadius(
atomic_number=14,
charge=4,
coordination='VI',
crystal_radius=54.0,
econf='2p6',
id=380,
ionic_radius=40.0,
most_reliable=True,
origin='from r^3 vs V plots, ',
spin='',
)],
is_monoisotopic=None,
is_radioactive=False,
isotopes=[<Isotope(Z=14, A=22, mass=22.0361(5), abundance=None)>, <Isotope(Z=14, A=23, mass=23.0257(5), abundance=None)>, <Isotope(Z=14, A=24, mass=24.01154(2), abundance=None)>, <Isotope(Z=14, A=25, mass=25.00411(1), abundance=None)>, <Isotope(Z=14, A=26, mass=25.9923338(1), abundance=None)>, <Isotope(Z=14, A=27, mass=26.9867047(1), abundance=None)>, <Isotope(Z=14, A=28, mass=27.9769265344(6), abundance=92.254(4))>, <Isotope(Z=14, A=29, mass=28.9764946643(6), abundance=4.67(2))>, <Isotope(Z=14, A=30, mass=29.97377014(2), abundance=3.074(2))>, <Isotope(Z=14, A=31, mass=30.97536320(5), abundance=None)>, <Isotope(Z=14, A=32, mass=31.9741515(3), abundance=None)>, <Isotope(Z=14, A=33, mass=32.9779770(8), abundance=None)>, <Isotope(Z=14, A=34, mass=33.9785380(9), abundance=None)>, <Isotope(Z=14, A=35, mass=34.98455(4), abundance=None)>, <Isotope(Z=14, A=36, mass=35.98665(8), abundance=None)>, <Isotope(Z=14, A=37, mass=36.9929(1), abundance=None)>, <Isotope(Z=14, A=38, mass=37.9955(1), abundance=None)>, <Isotope(Z=14, A=39, mass=39.0025(1), abundance=None)>, <Isotope(Z=14, A=40, mass=40.0061(1), abundance=None)>, <Isotope(Z=14, A=41, mass=41.0142(3), abundance=None)>, <Isotope(Z=14, A=42, mass=42.0181(3), abundance=None)>, <Isotope(Z=14, A=43, mass=43.0261(4), abundance=None)>, <Isotope(Z=14, A=44, mass=44.0315(5), abundance=None)>, <Isotope(Z=14, A=45, mass=45.0398(6), abundance=None)>],
jmol_color='#f0c8a0',
lattice_constant=5.43,
lattice_structure='DIA',
mendeleev_number=88,
metallic_radius=117.0,
metallic_radius_c12=138.0,
molar_heat_capacity=19.99,
molcas_gv_color='#f0c8a0',
name='Silicon',
name_origin='Latin: silex, silicus, (flint).',
period=3,
pettifor_number=85,
phase_transitions=[14 Tm=1687.15 Tb=3538.15],
proton_affinity=837.0,
screening_constants=[<ScreeningConstant(Z= 14, n= 1, s=s, screening= 0.4255)>, <ScreeningConstant(Z= 14, n= 2, s=p, screening= 4.0550)>, <ScreeningConstant(Z= 14, n= 2, s=s, screening= 4.9800)>, <ScreeningConstant(Z= 14, n= 3, s=p, screening= 9.7148)>, <ScreeningConstant(Z= 14, n= 3, s=s, screening= 9.0968)>],
sources='Makes up major portion of clay, granite, quartz (SiO2), and sand. Commercial production depends on a reaction between sand (SiO2) and carbon at a temperature of around 2200 °C.',
specific_heat_capacity=0.712,
symbol='Si',
thermal_conductivity=149.0,
uses='Used in glass as silicon dioxide (SiO2). Silicon carbide (SiC) is one of the hardest substances known and used in polishing. Also the crystalline form is used in semiconductors.',
vdw_radius=210.0,
vdw_radius_alvarez=219.0,
vdw_radius_batsanov=210.0,
vdw_radius_bondi=210.0,
vdw_radius_dreiding=426.99999999999994,
vdw_radius_mm3=229.0,
vdw_radius_rt=None,
vdw_radius_truhlar=None,
vdw_radius_uff=429.5,
)
Similarly to access the data by atomic number or element names type
[5]:
al = element(13)
print(al.name)
Aluminum
[6]:
o = element('Oxygen')
print(o.atomic_number)
8
Getting list of elements¶
The element
method also accepts list or tuple of identifiers and then returns a list of Element
objects
[7]:
c, h, o = element(['C', 'Hydrogen', 8])
print(c.name, h.name, o.name)
Carbon Hydrogen Oxygen
Extended attributes¶
Next to simple attributes returning str
, int
or float
, there are extended attributes
oxistates
, returns a list of oxidation statesionenergies
, returns a dictionary of ionization energiesisotopes
, returns a list ofIsotope
objectsionic_radii
returns a list ofIonicRadius
objectsec
, electronic configuration object
Oxidation states¶
oxistates
returns a list of most common oxidation states for a given element
[8]:
fe = element('Fe')
print(fe.oxistates)
[2, 3]
Ionization energies¶
The ionenergies
returns a dictionary with ionization energies in eV
as values and degrees of ionization as keys
[9]:
o = element('O')
o.ionenergies
[9]:
{1: 13.618054,
2: 35.12111,
3: 54.93554,
4: 77.4135,
5: 113.8989,
6: 138.1189,
7: 739.32679,
8: 871.40985}
Isotopes¶
The isotopes
attribute returns a list of Isotope
objects with the following attributes per isotope
abundance
abundance_uncertainty
atomic_number
discovery_year
g_factor
g_factor_uncertainty
half_life
half_life_uncertainty
half_life_unit
is_radioactive
mass
mass_number
mass_uncertainty
parity
quadrupole_moment
quadrupole_moment_uncertainty
spin
[ ]:
[10]:
print("{0:^4s} {1:^4s} {2:^10s} {3:8s} {4:6s} {5:5s}\n{6}".format("AN", "MN", "Mass", "Unc.", "Abu.", "Rad.", "-" * 42))
for iso in fe.isotopes:
print('{0:4d} {1:4d} {2:10.5f} {3:8.2e} {4:} {5:}'.format(
iso.atomic_number, iso.mass_number, iso.mass, iso.mass_uncertainty, iso.abundance, iso.is_radioactive))
AN MN Mass Unc. Abu. Rad.
------------------------------------------
26 45 45.01547 3.04e-04 None True
26 46 46.00130 3.22e-04 None True
26 47 46.99235 5.37e-04 None True
26 48 47.98067 9.90e-05 None True
26 49 48.97343 2.60e-05 None True
26 50 49.96299 9.00e-06 None True
26 51 50.95686 1.50e-06 None True
26 52 51.94811 1.92e-07 None True
26 53 52.94531 1.79e-06 None True
26 54 53.93961 3.68e-07 5.845 False
26 55 54.93829 3.30e-07 None True
26 56 55.93494 2.87e-07 91.754 False
26 57 56.93539 2.87e-07 2.119 False
26 58 57.93327 3.39e-07 0.282 False
26 59 58.93487 3.54e-07 None True
26 60 59.93407 3.66e-06 None True
26 61 60.93675 2.80e-06 None True
26 62 61.93679 3.00e-06 None True
26 63 62.94027 4.62e-06 None True
26 64 63.94099 5.39e-06 None True
26 65 64.94502 5.49e-06 None True
26 66 65.94625 4.40e-06 None True
26 67 66.95093 4.10e-06 None True
26 68 67.95288 2.07e-04 None True
26 69 68.95792 2.15e-04 None True
26 70 69.96040 3.22e-04 None True
26 71 70.96572 4.29e-04 None True
26 72 71.96860 5.37e-04 None True
26 73 72.97425 5.37e-04 None True
26 74 73.97782 5.37e-04 None True
26 75 74.98422 6.44e-04 None True
26 76 75.98863 6.44e-04 None True
Accessing isotopes¶
Similarly to element
function that can be used to fetch specific isotopes by:
atomic_number
andmass_number
orsymbol
andmass_number
[11]:
from mendeleev import isotope
[12]:
isotope("Fe", mass_number=57)
[12]:
<Isotope(Z=26, A=57, mass=56.9353920(3), abundance=2.12(3))>
[13]:
# tritium
isotope(1, 3)
[13]:
<Isotope(Z=1, A=3, mass=3.01604928132(8), abundance=None)>
Radioactive isotopes can have multiple decay modes and that data is available as decay_modes
attrobute for each Isotope
[14]:
isotope("Li", 11).decay_modes
[14]:
[<IsotopeDecayMode(id=40, isotope_id=39, mode='B-', intensity=100.0)>,
<IsotopeDecayMode(id=41, isotope_id=39, mode='B-n', intensity=86.3)>,
<IsotopeDecayMode(id=42, isotope_id=39, mode='2n', intensity=4.1)>,
<IsotopeDecayMode(id=43, isotope_id=39, mode='3n', intensity=1.9)>,
<IsotopeDecayMode(id=44, isotope_id=39, mode='B-A', intensity=1.7)>,
<IsotopeDecayMode(id=45, isotope_id=39, mode='B-d', intensity=0.013)>,
<IsotopeDecayMode(id=46, isotope_id=39, mode='B-t', intensity=0.0093)>]
Ionic radii¶
Another composite attribute is ionic_radii
which returns a list of IonicRadius
object with the following attributes
atomic_number
, atomic number of the ioncharge
, charge of the ioneconf
, electronic configuration of the ioncoordination
, coordination type of the ionspin
, spin state of the ion (HS or LS)crystal_radius
, crystal radius in pmionic_radius
, ionic radius in pmorigin
, source of the datamost_reliable
, recommended value, (see the original paper for more information)
[15]:
for ir in fe.ionic_radii:
print(ir)
charge= 2, coordination=IV , crystal_radius=77.000, ionic_radius=63.000
charge= 2, coordination=IVSQ , crystal_radius=78.000, ionic_radius=64.000
charge= 2, coordination=VI , crystal_radius=75.000, ionic_radius=61.000
charge= 2, coordination=VI , crystal_radius=92.000, ionic_radius=78.000
charge= 2, coordination=VIII , crystal_radius=106.000, ionic_radius=92.000
charge= 3, coordination=IV , crystal_radius=63.000, ionic_radius=49.000
charge= 3, coordination=V , crystal_radius=72.000, ionic_radius=58.000
charge= 3, coordination=VI , crystal_radius=69.000, ionic_radius=55.000
charge= 3, coordination=VI , crystal_radius=78.500, ionic_radius=64.500
charge= 3, coordination=VIII , crystal_radius=92.000, ionic_radius=78.000
charge= 4, coordination=VI , crystal_radius=72.500, ionic_radius=58.500
charge= 6, coordination=IV , crystal_radius=39.000, ionic_radius=25.000
Useful functions for calculating properties¶
Next to stored attributes there is a number of useful functions
[16]:
si = element('Si')
[17]:
# get the number of valence electrons
si.nvalence()
[17]:
4
[18]:
# calculate softness for an ion
si.softness(charge=2)
[18]:
0.058318712346158874
[19]:
# calcualte hardness for an ion
si.hardness(charge=4)
[19]:
60.812605
[20]:
# calculate the effective nuclear charge for a subshell using Slater's rules
si.zeff(n=3, o='s')
[20]:
4.149999999999999
[21]:
# calculate the effective nuclear charge for a subshell using Clemneti's and Raimondi's exponents
si.zeff(n=3, o='s', method='clementi')
[21]:
4.9032
Electronegativity¶
Currently there are 9 electronagativity scales implemented that can me accessed though the common electronegativity
method, the scales are:
allen
allred-rochow
cottrell-sutton
ghosh
gordy
li-xue
martynov-batsanov
mulliken
nagle
pauling
sanderson
More information can be found in the documentation.
[22]:
si.electronegativity(scale='pauling')
[22]:
1.9
[23]:
si.electronegativity(scale='allen')
[23]:
11.33
[24]:
# calculate mulliken electronegativity for a neutral atom or ion
si.electronegativity(scale="mulliken", charge=1)
[24]:
12.248764000000001
CLI utility¶
For those who work in the terminal there is a simple command line interface (CLI) for printing the information about a given element. The script name is element.py and it accepts either the symbol or name of the element as an argument and prints the data about it. For example, to print the properties of silicon type
[25]:
!element.py Si
/usr/bin/sh: 1: element.py: not found
Bulk data access¶
This tutorial explains how to retrieve full tables from the database into pandas DataFrames.
The following tables are available from mendeleev
¶
elements
ionicradii
ionizationenergies
oxidationstates
groups
series
isotopes
All data is stored in a sqlite database that is shipped together with the package. You can interact directly with the database if you need more flexibility but for convenience mendeleev
provides a few functions in the fetch
module to retrieve data.
To fetch whole tables you can use fetch_table
. The function can be imported from mendeleev.fetch
[1]:
from mendeleev.fetch import fetch_table
To retrieve a table call the fetch_table
with the table name as argument. Here we’ll get probably the most important table elements
with basis data on each element
[3]:
ptable = fetch_table('elements')
Now we can use pandas’ capabilities to work with the data.
[4]:
ptable.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 118 entries, 0 to 117
Data columns (total 70 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 annotation 118 non-null object
1 atomic_number 118 non-null int64
2 atomic_radius 90 non-null float64
3 atomic_volume 91 non-null float64
4 block 118 non-null object
5 boiling_point 96 non-null float64
6 density 95 non-null float64
7 description 109 non-null object
8 dipole_polarizability 117 non-null float64
9 electron_affinity 77 non-null float64
10 electronic_configuration 118 non-null object
11 evaporation_heat 88 non-null float64
12 fusion_heat 75 non-null float64
13 group_id 90 non-null float64
14 lattice_constant 87 non-null float64
15 lattice_structure 91 non-null object
16 melting_point 100 non-null float64
17 name 118 non-null object
18 period 118 non-null int64
19 series_id 118 non-null int64
20 specific_heat 81 non-null float64
21 symbol 118 non-null object
22 thermal_conductivity 66 non-null float64
23 vdw_radius 103 non-null float64
24 covalent_radius_cordero 96 non-null float64
25 covalent_radius_pyykko 118 non-null float64
26 en_pauling 85 non-null float64
27 en_allen 71 non-null float64
28 jmol_color 109 non-null object
29 cpk_color 103 non-null object
30 proton_affinity 32 non-null float64
31 gas_basicity 32 non-null float64
32 heat_of_formation 89 non-null float64
33 c6 43 non-null float64
34 covalent_radius_bragg 37 non-null float64
35 vdw_radius_bondi 28 non-null float64
36 vdw_radius_truhlar 16 non-null float64
37 vdw_radius_rt 9 non-null float64
38 vdw_radius_batsanov 65 non-null float64
39 vdw_radius_dreiding 21 non-null float64
40 vdw_radius_uff 103 non-null float64
41 vdw_radius_mm3 94 non-null float64
42 abundance_crust 88 non-null float64
43 abundance_sea 81 non-null float64
44 molcas_gv_color 103 non-null object
45 en_ghosh 103 non-null float64
46 vdw_radius_alvarez 94 non-null float64
47 c6_gb 86 non-null float64
48 atomic_weight 118 non-null float64
49 atomic_weight_uncertainty 74 non-null float64
50 is_monoisotopic 21 non-null object
51 is_radioactive 118 non-null bool
52 cas 118 non-null object
53 atomic_radius_rahm 96 non-null float64
54 geochemical_class 76 non-null object
55 goldschmidt_class 118 non-null object
56 metallic_radius 56 non-null float64
57 metallic_radius_c12 63 non-null float64
58 covalent_radius_pyykko_double 108 non-null float64
59 covalent_radius_pyykko_triple 80 non-null float64
60 discoverers 118 non-null object
61 discovery_year 105 non-null float64
62 discovery_location 106 non-null object
63 name_origin 118 non-null object
64 sources 118 non-null object
65 uses 112 non-null object
66 mendeleev_number 118 non-null int64
67 dipole_polarizability_unc 117 non-null float64
68 pettifor_number 103 non-null float64
69 glawe_number 103 non-null float64
dtypes: bool(1), float64(46), int64(4), object(19)
memory usage: 63.8+ KB
For clarity let’s take only a subset of columns
[5]:
cols = ['atomic_number', 'symbol', 'atomic_radius', 'en_pauling', 'block', 'vdw_radius_mm3']
[6]:
ptable[cols].head()
[6]:
atomic_number | symbol | atomic_radius | en_pauling | block | vdw_radius_mm3 | |
---|---|---|---|---|---|---|
0 | 1 | H | 25.0 | 2.20 | s | 162.0 |
1 | 2 | He | 120.0 | NaN | s | 153.0 |
2 | 3 | Li | 145.0 | 0.98 | s | 255.0 |
3 | 4 | Be | 105.0 | 1.57 | s | 223.0 |
4 | 5 | B | 85.0 | 2.04 | p | 215.0 |
It is quite easy now to get descriptive statistics on the data.
[7]:
ptable[cols].describe()
[7]:
atomic_number | atomic_radius | en_pauling | vdw_radius_mm3 | |
---|---|---|---|---|
count | 118.000000 | 90.000000 | 85.000000 | 94.000000 |
mean | 59.500000 | 149.844444 | 1.748588 | 248.468085 |
std | 34.207699 | 40.079110 | 0.634442 | 36.017828 |
min | 1.000000 | 25.000000 | 0.700000 | 153.000000 |
25% | 30.250000 | 135.000000 | 1.240000 | 229.000000 |
50% | 59.500000 | 145.000000 | 1.700000 | 244.000000 |
75% | 88.750000 | 178.750000 | 2.160000 | 269.250000 |
max | 118.000000 | 260.000000 | 3.980000 | 364.000000 |
Isotopes table¶
Let try and retrieve another table, namely isotopes
[8]:
isotopes = fetch_table('isotopes', index_col='id')
[9]:
isotopes.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 406 entries, 1 to 406
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 atomic_number 406 non-null int64
1 mass 377 non-null float64
2 abundance 288 non-null float64
3 mass_number 406 non-null int64
4 mass_uncertainty 377 non-null float64
5 is_radioactive 406 non-null bool
6 half_life 121 non-null float64
7 half_life_unit 85 non-null object
8 spin 323 non-null float64
9 g_factor 323 non-null float64
10 quadrupole_moment 320 non-null float64
dtypes: bool(1), float64(7), int64(2), object(1)
memory usage: 35.3+ KB
Merge the elements table with the isotopes¶
We can now perform SQL-like merge operation on two DataFrame
s and produce an outer join
[10]:
import pandas as pd
[11]:
merged = pd.merge(ptable[cols], isotopes, how='outer', on='atomic_number')
now we have the following columns in the merged
DataFrame
[12]:
merged.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 406 entries, 0 to 405
Data columns (total 16 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 atomic_number 406 non-null int64
1 symbol 406 non-null object
2 atomic_radius 328 non-null float64
3 en_pauling 313 non-null float64
4 block 406 non-null object
5 vdw_radius_mm3 350 non-null float64
6 mass 377 non-null float64
7 abundance 288 non-null float64
8 mass_number 406 non-null int64
9 mass_uncertainty 377 non-null float64
10 is_radioactive 406 non-null bool
11 half_life 121 non-null float64
12 half_life_unit 85 non-null object
13 spin 323 non-null float64
14 g_factor 323 non-null float64
15 quadrupole_moment 320 non-null float64
dtypes: bool(1), float64(10), int64(2), object(3)
memory usage: 51.1+ KB
[13]:
merged.head()
[13]:
atomic_number | symbol | atomic_radius | en_pauling | block | vdw_radius_mm3 | mass | abundance | mass_number | mass_uncertainty | is_radioactive | half_life | half_life_unit | spin | g_factor | quadrupole_moment | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | H | 25.0 | 2.2 | s | 162.0 | 1.007825 | 0.999720 | 1 | 6.000000e-10 | False | NaN | None | 0.5 | 5.585695 | 0.00000 |
1 | 1 | H | 25.0 | 2.2 | s | 162.0 | 2.014102 | 0.000280 | 2 | 8.000000e-10 | False | NaN | None | 1.0 | 0.857438 | 0.00286 |
2 | 1 | H | 25.0 | 2.2 | s | 162.0 | NaN | NaN | 3 | NaN | True | NaN | None | 0.5 | 5.957994 | 0.00000 |
3 | 2 | He | 120.0 | NaN | s | 153.0 | 3.016029 | 0.000002 | 3 | 2.000000e-08 | False | NaN | None | 0.5 | -4.254995 | 0.00000 |
4 | 2 | He | 120.0 | NaN | s | 153.0 | 4.002603 | 0.999998 | 4 | 4.000000e-10 | False | NaN | None | 0.0 | 0.000000 | 0.00000 |
To display all the isotopes of Silicon
[14]:
merged[merged['symbol'] == 'Si']
[14]:
atomic_number | symbol | atomic_radius | en_pauling | block | vdw_radius_mm3 | mass | abundance | mass_number | mass_uncertainty | is_radioactive | half_life | half_life_unit | spin | g_factor | quadrupole_moment | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
28 | 14 | Si | 110.0 | 1.9 | p | 229.0 | 27.976927 | 0.92191 | 28 | 3.000000e-09 | False | NaN | None | 0.0 | 0.00000 | 0.0 |
29 | 14 | Si | 110.0 | 1.9 | p | 229.0 | 28.976495 | 0.04699 | 29 | 3.000000e-09 | False | NaN | None | 0.5 | -1.11058 | 0.0 |
30 | 14 | Si | 110.0 | 1.9 | p | 229.0 | 29.973770 | 0.03110 | 30 | 2.000000e-08 | False | NaN | None | 0.0 | 0.00000 | 0.0 |
Ionic radii¶
The function to fetch ionic radii is called fetch_ionic_radii
and can either fetch ionic or crystal radii depending on the radius
argument.
[2]:
from mendeleev.fetch import fetch_ionic_radii
[3]:
irs = fetch_ionic_radii(radius="ionic_radius")
irs.head(10)
[3]:
coordination | I | II | III | IIIPY | IV | IVPY | IVSQ | IX | V | VI | VII | VIII | X | XI | XII | XIV | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
atomic_number | charge | ||||||||||||||||
1 | 1 | -38.0 | -18.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
3 | 1 | NaN | NaN | NaN | NaN | 59.0 | NaN | NaN | NaN | NaN | 76.0 | NaN | 92.0 | NaN | NaN | NaN | NaN |
4 | 2 | NaN | NaN | 16.0 | NaN | 27.0 | NaN | NaN | NaN | NaN | 45.0 | NaN | NaN | NaN | NaN | NaN | NaN |
5 | 3 | NaN | NaN | 1.0 | NaN | 11.0 | NaN | NaN | NaN | NaN | 27.0 | NaN | NaN | NaN | NaN | NaN | NaN |
6 | 4 | NaN | NaN | -8.0 | NaN | 15.0 | NaN | NaN | NaN | NaN | 16.0 | NaN | NaN | NaN | NaN | NaN | NaN |
7 | -3 | NaN | NaN | NaN | NaN | 146.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
3 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 16.0 | NaN | NaN | NaN | NaN | NaN | NaN | |
5 | NaN | NaN | -10.4 | NaN | NaN | NaN | NaN | NaN | NaN | 13.0 | NaN | NaN | NaN | NaN | NaN | NaN | |
8 | -2 | NaN | 135.0 | 136.0 | NaN | 138.0 | NaN | NaN | NaN | NaN | 140.0 | NaN | 142.0 | NaN | NaN | NaN | NaN |
9 | -1 | NaN | 128.5 | 130.0 | NaN | 131.0 | NaN | NaN | NaN | NaN | 133.0 | NaN | NaN | NaN | NaN | NaN | NaN |
Ionization energies¶
To fetch ionization energies use fetch_ionization_energies
that takes a degree
(default is degree=1
) argument that can either be a single integer or a list if integers to fetch multiple ionization energies.
[17]:
from mendeleev.fetch import fetch_ionization_energies
[25]:
ies = fetch_ionization_energies(degree=2)
ies.head(10)
[25]:
IE2 | |
---|---|
atomic_number | |
1 | NaN |
2 | 54.417763 |
3 | 75.640094 |
4 | 18.211153 |
5 | 25.154830 |
6 | 24.384500 |
7 | 29.601250 |
8 | 35.121110 |
9 | 34.970810 |
10 | 40.962960 |
[24]:
ies_multiple = fetch_ionization_energies(degree=[1, 3, 5])
ies_multiple.head(10)
[24]:
IE1 | IE3 | IE5 | |
---|---|---|---|
atomic_number | |||
1 | 13.598434 | NaN | NaN |
2 | 24.587388 | NaN | NaN |
3 | 5.391715 | 122.454354 | NaN |
4 | 9.322699 | 153.896198 | NaN |
5 | 8.298019 | 37.930580 | 340.226008 |
6 | 11.260296 | 47.887780 | 392.090500 |
7 | 14.534130 | 47.445300 | 97.890130 |
8 | 13.618054 | 54.935540 | 113.898900 |
9 | 17.422820 | 62.708000 | 114.249000 |
10 | 21.564540 | 63.423310 | 126.247000 |
Electronegativities¶
To fetch all data from electronegatuivity scales use fetch_electronegativities
. This can take a few seconds since most of the values need to be computed.
[26]:
from mendeleev.fetch import fetch_electronegativities
[27]:
ens = fetch_electronegativities()
ens.head(10)
[27]:
Allen | Allred-Rochow | Cottrell-Sutton | Ghosh | Gordy | Li-Xue | Martynov-Batsanov | Mulliken | Nagle | Pauling | Sanderson | |
---|---|---|---|---|---|---|---|---|---|---|---|
atomic_number | |||||||||||
1 | 13.610 | 0.000977 | 0.176777 | 0.263800 | 0.031250 | {('I', ''): -3.540721753312244, ('II', ''): -2... | 3.687605 | 6.799217 | 0.605388 | 2.20 | 2.187771 |
2 | 24.590 | 0.000803 | 0.192241 | 0.442712 | 0.036957 | {} | 6.285107 | 12.293694 | 1.130639 | NaN | 1.000000 |
3 | 5.392 | 0.000073 | 0.098866 | 0.105093 | 0.009774 | {('IV', ''): 1.7160634314550876, ('VI', ''): 1... | 2.322007 | 2.695857 | 0.182650 | 0.98 | 0.048868 |
4 | 9.323 | 0.000187 | 0.138267 | 0.144986 | 0.019118 | {} | 3.710381 | 4.661350 | 0.375615 | 1.57 | 0.126847 |
5 | 12.130 | 0.000360 | 0.174895 | 0.184886 | 0.030588 | {} | 4.877958 | 4.149010 | 0.526974 | 2.04 | 0.254627 |
6 | 15.050 | 0.000578 | 0.208167 | 0.224776 | 0.043333 | {} | 6.083300 | 5.630148 | 0.707393 | 2.55 | 0.427525 |
7 | 18.130 | 0.000774 | 0.234371 | 0.264930 | 0.054930 | {} | 7.306768 | 7.267065 | 0.877498 | 3.04 | 0.577482 |
8 | 21.360 | 0.001146 | 0.268742 | 0.304575 | 0.072222 | {} | 8.496136 | 6.809027 | 1.042218 | 3.44 | 0.941649 |
9 | 24.800 | 0.001270 | 0.285044 | 0.344443 | 0.081250 | {} | 9.701808 | 8.711410 | 1.232373 | 3.98 | 1.017681 |
10 | 28.310 | 0.001303 | 0.295488 | 0.384390 | 0.087313 | {} | 10.918389 | NaN | 1.443255 | NaN | 1.000000 |
Electronic configuration¶
ec
attribute is an object from the ElectronicConfiguration
class that has additional method for manipulating the configuration. Internally the configuration is represented as a OrderedDict
from the collections
module where tuples (n, s)
(n
is the principal quantum number and s
is the subshell label) are used as keys and shell occupations are the values
[1]:
from mendeleev import Si
[2]:
Si.ec.conf
[2]:
OrderedDict([((1, 's'), 2),
((2, 's'), 2),
((2, 'p'), 6),
((3, 's'), 2),
((3, 'p'), 2)])
the occupation of different subshells can be access supplying a proper key
[3]:
Si.ec.conf[(1, 's')]
[3]:
2
to calculate the number of electrons per shell type
[4]:
Si.ec.electrons_per_shell()
[4]:
{'K': 2, 'L': 8, 'M': 4}
get the largest value of the pricipal quantum number
[5]:
Si.ec.max_n()
[5]:
3
Get the largest value of azimutal quantum number for a given value of principal quantum number
[6]:
Si.ec.max_l(n=3)
[6]:
'p'
Find the large noble gas-like core configuration
[7]:
Si.ec.get_largest_core()
[7]:
('Ne', <ElectronicConfiguration(conf="1s2 2s2 2p6")>)
Get the total number of electrons
[8]:
Si.ec.ne()
[8]:
14
Last subshell
[9]:
Si.ec.last_subshell()
[9]:
((3, 'p'), 2)
Get unpaired electrons
[10]:
Si.ec.unpaired_electrons()
[10]:
2
Remove electrons by ionizing returns a new configuration with an electron removed
[11]:
ionized = Si.ec.ionize()
print(ionized)
1s2 2s2 2p6 3s2 3p1
We can check that it actually has less electrons:
[12]:
ionized.ne()
[12]:
13
Spin occupations by subshell
[13]:
Si.ec.spin_occupations()
[13]:
OrderedDict([((1, 's'), {'pairs': 1, 'alpha': 1, 'beta': 1, 'unpaired': 0}),
((2, 's'), {'pairs': 1, 'alpha': 1, 'beta': 1, 'unpaired': 0}),
((2, 'p'), {'pairs': 3, 'alpha': 3, 'beta': 3, 'unpaired': 0}),
((3, 's'), {'pairs': 1, 'alpha': 1, 'beta': 1, 'unpaired': 0}),
((3, 'p'), {'pairs': 0, 'alpha': 2, 'beta': 0, 'unpaired': 2})])
Calculate the spin only magnetic moment
[14]:
Si.ec.spin_only_magnetic_moment()
[14]:
2.8284271247461903
Calculate the screening constant using Slater’s rules for 2s
orbital
[15]:
Si.ec.slater_screening(n=2, o='s')
[15]:
4.1499999999999995
Standalone use¶
You can use the ElectronicConfiguration
as a standalone class and use all of the methods shown above.
[16]:
from mendeleev.econf import ElectronicConfiguration
[17]:
ec = ElectronicConfiguration("1s2 2s2 2p6 3s1")
Get the valence only configuration
[18]:
ec.get_valence()
[18]:
<ElectronicConfiguration(conf="3s1")>
Ions¶
You can use the Ion
class to work with ions instead of elements. Ions can be created from elements and charge information.
[1]:
from mendeleev.ion import Ion
[2]:
fe_2 = Ion("Fe", 2)
You can access variety of properties of the ion
[3]:
fe_2.charge
[3]:
2
[4]:
fe_2.electrons
[4]:
24
[5]:
fe_2.Z
[5]:
26
[6]:
fe_2.name
[6]:
'Iron 2+ ion'
you can also print the unicode ion symbol
[7]:
fe_2.unicode_ion_symbol()
[7]:
'Fe²⁺'
Ionic radii for this ion are available under radius
attribute
[8]:
fe_2.radius
[8]:
[IonicRadius(
atomic_number=26,
charge=2,
coordination='IV',
crystal_radius=77.0,
econf='3d6',
id=149,
ionic_radius=63.0,
most_reliable=False,
origin='',
spin='HS',
),
IonicRadius(
atomic_number=26,
charge=2,
coordination='IVSQ',
crystal_radius=78.0,
econf='3d6',
id=150,
ionic_radius=64.0,
most_reliable=False,
origin='',
spin='HS',
),
IonicRadius(
atomic_number=26,
charge=2,
coordination='VI',
crystal_radius=75.0,
econf='3d6',
id=151,
ionic_radius=61.0,
most_reliable=False,
origin='estimated, ',
spin='LS',
),
IonicRadius(
atomic_number=26,
charge=2,
coordination='VI',
crystal_radius=92.0,
econf='3d6',
id=152,
ionic_radius=78.0,
most_reliable=True,
origin='from r^3 vs V plots, ',
spin='HS',
),
IonicRadius(
atomic_number=26,
charge=2,
coordination='VIII',
crystal_radius=106.0,
econf='3d6',
id=153,
ionic_radius=92.0,
most_reliable=False,
origin='calculated, ',
spin='HS',
)]
Appropriate value of ionization energy and electron affinity are available under ie
and ea
attributes
[9]:
fe_2.ie
[9]:
30.651
[10]:
fe_2.ea
[10]:
16.1992
compute ionic potential
[11]:
fe_2.ionic_potential()
[11]:
0.02564102564102564
Visualizing custom periodic tables¶
In this tutorial you’ll how to use mendeleev
to create customized visualizations of the periodic table.
The most convenient method to use for this is periodic_table
function from mendeleev.vis
module.
[1]:
from mendeleev.vis import periodic_table
Make sure you you have optional vis
dependencies installed when installing mendeleev
. If you are using pip install with
pip install mendeleev[vis]
To see the default visualization of the periodic table simply call the imported function
[2]:
periodic_table()
mendeleev
stores also two color schemes for atoms that are frequently used for visualizing molecular structures. One set is stored in the cpk_color
column and refers to CPK coloring, another is stored in jmol_color
column and is used by the Jmol program, finally there is also coloring scheme from MOLCAS GV program store in the molcas_gv_color
attribute.
They can be displayed either by hovering of the element to display a tooltip or used directly to color the element cells.
[3]:
periodic_table(colorby='jmol_color', title="JMol Colors")
[4]:
periodic_table(colorby='cpk_color', title='CPK Colors')
[5]:
periodic_table(colorby='molcas_gv_color', title='MOLCAS GV Colors')
Visualizing properties¶
Any of the properties in mendeleev
can now be visualized and color coded. This means that the value of selected attribute will be visible on each element and also it is possible to use the attribute to color code the background of each element.
Let’s first use the covalent_radius_pyykko
and display the values with the default color coding by series
[6]:
periodic_table(attribute='covalent_radius_pyykko', title="Covalent Radii of Pyykko")
Now let’s use the same attribute but in addition color code by the actual values, by adding colorby='attribute'
argument
[7]:
periodic_table(attribute='covalent_radius_pyykko', colorby='attribute', title="Covalent Radii of Pyykko")
The color map can aslo be csutomized using the cmap
argument to any of the standard colormaps available in matplotlib
[8]:
periodic_table(attribute='covalent_radius_pyykko', colorby='attribute',
cmap='spring', title="Covalent Radii of Pyykko")
Let also see one of the more modern colormaps: viridis
, plasma
, inferno
and magma
.
[9]:
periodic_table(attribute='covalent_radius_pyykko', colorby='attribute',
cmap='inferno', title="Covalent Radii of Pyykko")
Lets try a different property: atomic_volume
[10]:
periodic_table(attribute='atomic_volume', colorby='attribute', title='Atomic Volume')
[11]:
periodic_table(attribute='en_pauling', colorby='attribute',
title="Pauling's Electronegativity", cmap='viridis')
Wide 32-column version¶
The periodic_table
function can also present the periodic table in the so-called wide format with the f-block between the s- and d-blocks resulting in 32 columns.
[12]:
periodic_table(height=600, width=1500, wide_layout=True)
Advanced visualization tutorial¶
Next to the high level plotting function mendeleev.vis.periodic_table
, mendeleev
offers two lower level functions that give you more control over the result. There are two plotting backends supported:
Note¶
Depending on your environment being the classic jupyter notebook or jupyterlab you might have to do additional configuration steps, so if you’re not getting expected results see plotly of bokeh documentation.
Accessing lower level plotting functions¶
There are two plotting functions, one for each of the backends:
periodic_table_plotly
inmendeleev.vis.plotly
periodic_table_bokeh
inmendeleev.vis.bokeh
that you can use to customize the visualizations even further.
Both functions take the same keyword arguments as the periodic_table
function but the also require a DataFrame
with periodic table data. That dataframe needs to have x
and y
columns for each element that play the role of coordinates. You can get the default data using the create_vis_dataframe
function. Let’s start with an example using the plotly
backend.
[1]:
from mendeleev.vis import create_vis_dataframe, periodic_table_plotly
The function has only one required argument which is the data itself.
[2]:
elements = create_vis_dataframe()
periodic_table_plotly(elements)
Custom coloring scheme¶
To apply a custom color scheme you can assign color to all the elments in the DataFrame
. This can be done by creating a custom column in the DataFrame
and then using colorby
argument to specify which column contains colors. Let’s try to color the elements according to the block they belong to.
[3]:
import seaborn as sns
from matplotlib import colors
blockcmap = {b : colors.rgb2hex(c) for b, c in zip(['s', 'p', 'd', 'f'], sns.color_palette('deep'))}
elements['block_color'] = elements['block'].map(blockcmap)
periodic_table_plotly(elements, colorby='block_color')
Custom properties¶
You can also visualize custom properties using pandas’ awesome methods for manipulating data. For example let’s consider the difference of electronegativity between every element and the Oxygen atom. To calculate the values we will use Allen scale this time and call our new value ENX-ENO
.
[4]:
elements.loc[:, 'ENX-ENO'] = elements.loc[elements['symbol'] == 'O', 'en_allen'].values - elements.loc[:, 'en_allen']
periodic_table_plotly(elements, attribute='ENX-ENO', colorby='attribute',
cmap='viridis', title='Allen Electronegativity wrt. Oxygen')
As a second example let’s consider a difference between the covalent_radius_slater
and covalent_radius_pyykko
values
[5]:
elements['cov_rad_diff'] = elements['atomic_radius'] - elements['covalent_radius_pyykko']
periodic_table_plotly(elements, attribute='cov_rad_diff', colorby='attribute',
title='Covalent Radii Difference', cmap='viridis')
Bokeh backend¶
We can also use the Bokeh
backed in the same way but we need to take a few extra steps to render the result in a notebook
[6]:
from bokeh.plotting import show, output_notebook
from mendeleev.vis import periodic_table_bokeh
First we need to enable notebook output
[7]:
output_notebook()
[8]:
fig = periodic_table_bokeh(elements)
show(fig)
[9]:
fig = periodic_table_bokeh(elements, attribute="atomic_radius", colorby="attribute")
show(fig)
Jupyter notebooks¶
All tutorials are available as Jupyter notebooks on binder where you can explore the examples interactively:
Data¶
To find out how to fetch data in bulk, check out the documentation about data access.
Elements¶
The following data are currently available:
Name |
Type |
Comment |
Unit |
Data Source |
---|---|---|---|---|
abundance_crust |
float |
Abundance in the Earth’s crust |
mg/kg |
[23] |
abundance_sea |
float |
Abundance in the seas |
mg/L |
[23] |
annotation |
str |
Annotations regarding the data |
||
atomic_number |
int |
Atomic number |
||
atomic_radius |
float |
Atomic radius |
pm |
[53] |
atomic_radius_rahm |
float |
Atomic radius by Rahm et al. |
pm |
|
atomic_volume |
float |
Atomic volume |
cm3/mol |
|
atomic_weight |
float |
Atomic weight([1]) |
||
atomic_weight_uncertainty |
float |
Atomic weight uncertainty([1]) |
||
block |
str |
Block in periodic table |
||
boiling_point |
float |
Boiling temperature |
K |
[22] |
c6 |
float |
C_6 dispersion coefficient in a.u. |
a.u. |
|
c6_gb |
float |
C_6 dispersion coefficient in a.u. (Gould & Bučko) |
a.u. |
[21] |
cas |
str |
Chemical Abstracts Serice identifier |
||
covalent_radius_bragg |
float |
Covalent radius by Bragg |
pm |
[10] |
covalent_radius_cordero |
float |
Covalent radius by Cerdero et al.([2]) |
pm |
[16] |
covalent_radius_pyykko |
float |
Single bond covalent radius by Pyykko et al. |
pm |
[43] |
covalent_radius_pyykko_double |
float |
Double bond covalent radius by Pyykko et al. |
pm |
[42] |
covalent_radius_pyykko_triple |
float |
Triple bond covalent radius by Pyykko et al. |
pm |
[44] |
cpk_color |
str |
Element color in CPK convention |
HEX |
[61] |
critical_pressure |
float |
Critical pressure |
MPa |
[22] |
critical_temperature |
float |
Critical temperature |
K |
[22] |
density |
float |
Density at 295K([9]) |
g/cm3 |
|
description |
str |
Short description of the element |
||
dipole_polarizability |
float |
Dipole polarizability |
a.u. |
[51] |
dipole_polarizability_unc |
float |
Dipole polarizability uncertainty |
a.u. |
[51] |
discoverers |
str |
The discoverers of the element |
||
discovery_location |
str |
The location where the element was discovered |
||
discovery_year |
int |
The year the element was discovered |
||
electron_affinity |
float |
Electron affinity([3]) |
eV |
|
electrons |
int |
Number of electrons |
||
electrophilicity |
float |
Electrophilicity index |
eV |
[39] |
en_allen |
float |
Allen’s scale of electronegativity([4]) |
eV |
|
en_ghosh |
float |
Ghosh’s scale of electronegativity |
[18] |
|
en_mulliken |
float |
Mulliken’s scale of electronegativity |
eV |
[36] |
en_pauling |
float |
Pauling’s scale of electronegativity |
[23] |
|
econf |
str |
Ground state electron configuration |
||
evaporation_heat |
float |
Evaporation heat |
kJ/mol |
|
fusion_heat |
float |
Fusion heat |
kJ/mol |
|
gas_basicity |
float |
Gas basicity |
kJ/mol |
[23] |
geochemical_class |
str |
Geochemical classification |
[59] |
|
glawe_number |
int |
Glawe’s number (scale) |
[19] |
|
goldschmidt_class |
str |
Goldschmidt classification |
||
group |
int |
Group in periodic table |
||
heat_of_formation |
float |
Heat of formation |
kJ/mol |
[23] |
inchi |
str |
International Chemical Identifier |
[24] |
|
ionenergy |
tuple |
Ionization energies |
eV |
[26] |
ionic_radii |
list |
Ionic and crystal radii in pm([8]) |
pm |
|
is_monoisotopic |
bool |
Is the element monoisotopic |
||
is_radioactive |
bool |
Is the element radioactive |
||
isotopes |
list |
Isotopes |
||
jmol_color |
str |
Element color in Jmol convention |
HEX |
[64] |
lattice_constant |
float |
Lattice constant |
Angstrom |
|
lattice_structure |
str |
Lattice structure code |
||
mass_number |
int |
Mass number (most abundant isotope) |
||
melting_point |
float |
Melting temperature |
K |
[22] |
mendeleev_number |
int |
Mendeleev’s number([5]) |
||
metallic_radius |
float |
Single-bond metallic radius |
pm |
[1] |
metallic_radius_c12 |
float |
Metallic radius with 12 nearest neighbors |
pm |
[1] |
molar_heat_capacity |
float |
Molar heat capacity @ 25 C, 1 bar |
J/(mol K) |
[23] |
molcas_gv_color |
str |
Element color in MOCAS GV convention |
HEX |
[65] |
name |
str |
Name in English |
||
name_origin |
str |
Origin of the name |
||
neutrons |
int |
Number of neutrons (most abundant isotope) |
||
oxistates |
list |
Commonly occurring oxidation states |
[67] |
|
nist_webbook_url |
str |
URL for the NIST Chemistry WebBook |
[38] |
|
oxistates |
list |
Oxidation states |
||
period |
int |
Period in periodic table |
||
pettifor_number |
float |
Pettifor scale |
[41] |
|
proton_affinity |
float |
Proton affinity |
kJ/mol |
[23] |
protons |
int |
Number of protons |
||
sconst |
float |
Nuclear charge screening constants([6]) |
||
series |
int |
Index to chemical series |
||
sources |
str |
Sources of the element |
||
specific_heat_capacity |
float |
Specific heat capacity @ 25 C, 1 bar |
J/(g K) |
[23] |
symbol |
str |
Chemical symbol |
||
thermal_conductivity |
float |
Thermal conductivity @25 C |
W/(m K) |
|
triple_point_pressure |
float |
Triple point pressure |
kPa |
[22] |
triple_point_temperature |
float |
Triple point temperature |
K |
[22] |
uses |
str |
Applications of the element |
||
vdw_radius |
float |
Van der Waals radius |
pm |
[23] |
vdw_radius_alvarez |
float |
Van der Waals radius according to Alvarez([7]) |
pm |
|
vdw_radius_batsanov |
float |
Van der Waals radius according to Batsanov |
pm |
[8] |
vdw_radius_bondi |
float |
Van der Waals radius according to Bondi |
pm |
[9] |
vdw_radius_dreiding |
float |
Van der Waals radius from the DREIDING FF |
pm |
[34] |
vdw_radius_mm3 |
float |
Van der Waals radius from the MM3 FF |
pm |
[3] |
vdw_radius_rt |
float |
Van der Waals radius according to Rowland and Taylor |
pm |
[48] |
vdw_radius_truhlar |
float |
Van der Waals radius according to Truhlar |
pm |
[33] |
vdw_radius_uff |
float |
Van der Waals radius from the UFF |
pm |
[47] |
Isotopes¶
Name |
Type |
Comment |
Unit |
Data Source |
---|---|---|---|---|
abundance |
float |
Relative Abundance |
[25] |
|
abundance_uncertainty |
float |
Uncertainty of relative abundance |
[25] |
|
atomic_number |
int |
Atomic number |
||
decay_modes |
obj |
Decay modes with intensities |
[25] |
|
discovery_year |
int |
Year the isotope was discovered |
[25] |
|
g_factor |
float |
Nuclear g-factor |
[55] |
|
g_factor_uncertainty |
float |
Uncertainty of the nuclear g-factor |
[55] |
|
half_life |
float |
Half life of the isotope |
[25] |
|
half_life_uncertainty |
float |
Uncertainty of the half life |
[25] |
|
half_life_unit |
str |
Unit in which the half life is given |
[25] |
|
is_radioactive |
bool |
Is the isotope radioactive |
[62] |
|
mass |
float |
Atomic mass |
Da |
[62] |
mass_number |
int |
Mass number of the isotope |
[62] |
|
mass_uncertainty |
float |
Uncertainty of the atomic mass |
Da |
[62] |
parity |
str |
Parity, if present, it can be either + or - |
[25] |
|
quadrupole_moment |
float |
Nuclear electric quadrupole moment |
b [100 fm2] |
[54] |
quadrupole_moment_uncertainty |
float |
Nuclear electric quadrupole moment |
b [100 fm2] |
[54] |
spin |
str |
Nuclear spin quantum number |
[25] |
Isotope Decay Modes¶
Name |
Type |
Comment |
Unit |
Data Source |
---|---|---|---|---|
isotope_id |
int |
ID of the isotope |
||
mode |
str |
ASCII symbol of the decay mode |
[25] |
|
relation |
str |
Uncertainty of relative abundance |
[25] |
|
intensity |
float |
Intensity of the decay mode |
% |
[25] |
is_allowed_not_observed |
bool |
If True decay mode is energetically allowed, but not experimentally observed |
[25] |
|
is_observed_intensity_unknown |
bool |
If True decay mode is observed, but its intensity is not experimentally known |
[25] |
The different modes in the table are stores as ASCII representations for compatibility. The table below provides explanations of the symbols.
ASCII |
Unicode |
Description |
---|---|---|
A |
\(\alpha\) |
\(\alpha\) emission |
p |
p |
proton emission |
2p |
2p |
2-proton emission |
n |
n |
neutron emission |
2n |
2n |
2-neutron emission |
EC |
\(\epsilon\) |
electron capture |
e+ |
\(e^{+}\) |
positron emission |
B+ |
\(\beta^{+}\) |
\(\beta^{+}\) decay (\(\beta^{+}=\epsilon+e^{+}\)) |
B- |
\(\beta^{-}\) |
\(\beta^{-}\) decay |
2B- |
2\(\beta^{-}\) |
double \(\beta^{-}\) decay |
2B+ |
2\(\beta^{+}\) |
double \(\beta^{+}\) decay |
B-n |
\(\beta^{-}\) n |
\(\beta^{-}\)-delayed neutron emission |
B-2n |
\(\beta^{-}\) 2n |
\(\beta^{-}\)-delayed 2-neutron emission |
B-3n |
\(\beta^{-}\) 3n |
\(\beta^{-}\)-delayed 3-neutron emission |
B+p |
\(\beta^{+}\) p |
\(\beta^{+}\)-delayed proton emission |
B+2p |
\(\beta^{+}\) 2p |
\(\beta^{+}\)-delayed 2-proton emission |
B+3p |
\(\beta^{+}\) 3p |
\(\beta^{+}\)-delayed 3-proton emission |
B-A |
\(\beta^{-}\alpha\) |
\(\beta^{-}\)-delayed \(\alpha\) emission |
B+A |
\(\beta^{+}\alpha\) |
\(\beta^{+}\)-delayed \(\alpha\) emission |
B-d |
\(\beta^{-}\) d |
\(\beta^{-}\)-delayed deuteron emission |
B-t |
\(\beta^{-}\) t |
\(\beta^{-}\)-delayed triton emission |
IT |
IT |
internal transition |
SF |
SF |
spontaneous fission |
B+SF |
\(\beta^{+}\) SF |
\(\beta^{+}\)-delayed fission |
B-SF |
\(\beta^{-}\) SF |
\(\beta^{-}\)-delayed fission |
24Ne |
24Ne |
heavy cluster emission |
Data Footnotes
Accessing data¶
Individual Elements¶
The easiest way to access individual elements is simply by importing them from the mendeleev directly using their symbols:
>>> from mendeleev import H, C, O, Og
>>> [x.name for x in [H, C, O, Og]]
['Hydrogen', 'Carbon', 'Oxygen', 'Oganesson']
An alternative method of access is through the element()
function that
returns either a single Element
instance or a tuple of those instances depending on the input. It provides a more flexible interface
since it accepts element names, atomic numbers and symbols as well as their combinations.
Fetching data in bulk¶
If you want a whole set of data you can retrieve one of the tables from the
database as pandas
DataFrame through the fetch_table()
. The following
tables are available:
- fetch_table(table: str, **kwargs) pandas.DataFrame [source]¶
Return a table from the database as
pandas.DataFrame
- Parameters:
table – Name of the table from the database
kwargs – A dictionary of keyword arguments to pass to the
pandas.read_qsl()
- Returns:
Pandas DataFrame with the contents of the table
- Return type:
df (pandas.DataFrame)
Example
>>> from mendeleev.fetch import fetch_table >>> df = fetch_table('elements') >>> type(df) pandas.core.frame.DataFrame
- fetch_ionization_energies(degree: List[int] | int = 1) pandas.DataFrame [source]¶
Fetch a
pandas.DataFrame
with ionization energies for all elements indexed by atomic number.- Parameters:
degree – Degree of ionization, either as int or a list of ints. If a list is passed then the output will contain ionization energies corresponding to particalr degrees in columns.
- Returns:
ionization energies, indexed by atomic number
- Return type:
df (pandas.DataFrame)
- fetch_ionic_radii(radius: str = 'ionic_radius') pandas.DataFrame [source]¶
Fetch a pandas DataFrame with ionic radii for all the elements.
- Parameters:
radius – The radius to be returned either ionic_radius or crystal_radius
- Returns:
- a table with atomic numbers, symbols and ionic radii for all
coordination numbers
- Return type:
df (pandas.DataFrame)
Computed properties¶
Some properties need to be computed rather than directly retrieved from the database. Electronegativities
- fetch_electronegativities(scales: List[str] = None) pandas.DataFrame [source]¶
Fetch electronegativity scales for all elements as
pandas.DataFrame
- Parameters:
scales – list of scale names, defaults to all available scales
- Returns:
Pandas DataFrame with the contents of the table
- Return type:
df (pandas.DataFrame)
Database session and engine¶
For those how want to interact with the database through a layer of SQLAlchemy there are methods for getting the session or the engine:
Electronegativities¶
Since electronegativity is useful concept rather than a physical observable, several scales of electronegativity exist and some of them are available in mendeleev. Depending on the definition of a particular scale the values are either stored directly or recomputed on demand with appropriate formulas. The following scales are stored:
Moreover there are electronegativity scales that can be computed from their respective definition and the atomic properties available in mendeleev:
For a short overview on electronegativity see this presentation.
All the examples shown below are for Silicon:
>>> from mendeleev import element
>>> Si = element('Si')
Allen¶
The electronegativity scale proposed by Allen in ref [2] is defined as:
where: \(\varepsilon_{x}\) is the multiplet-averaged one-electron energy of the subshell \(x\) and \(n_{x}\) is the number of electrons in subshell \(x\) and the summation runs over the valence shell.
The values that are tabulated were obtained from refs. [31] and [32].
Example:
>>> Si.en_allen
11.33
>>> Si.electronegativity('allen')
11.33
Allred and Rochow¶
The scale of Allred and Rochow [4] introduces the electronegativity as the electrostatic force exerted on the electron by the nuclear charge:
where: \(Z_{\text{eff}}\) is the effective nuclear charge and \(r\) is the covalent radius.
Example:
>>> Si.electronegativity('allred-rochow')
0.00028240190249702736
Cottrell and Sutton¶
The scale proposed by Cottrell and Sutton [17] is derived from the equation:
where: \(Z_{\text{eff}}\) is the effective nuclear charge and \(r\) is the covalent radius.
Example:
>>> Si.electronegativity('cottrell-sutton')
0.18099342720014772
Ghosh¶
Ghosh [18] presented a scale of electronegativity based on the absolute radii of atoms computed as
where: \(R\) is the absolute atomic radius and \(a\) and \(b\) are empirical parameters.
Example:
>>> Si.en_ghosh
0.178503
Gordy¶
Gordy’s scale [20] is based on the potential that measures the work necessary to achieve the charge separation, according to:
where: \(Z_{\text{eff}}\) is the effective nuclear charge and \(r\) is the covalent radius.
Example:
>>> Si.electronegativity('gordy')
0.03275862068965517
Li and Xue¶
Li and Xue [27, 28] proposed a scale that takes into account different valence states and coordination environment of atoms and is calculated according to the following formula:
where: \(n^{*}\) is the effective principal quantum number, \(I_{j}\) is the j’th ionization energy in eV, \(Ry\) is the Rydberg constant in eV and \(r\) is either the crystal radius or ionic radius.
Example:
>>> Si.en_li_xue(charge=4)
{u'IV': 13.16033405547733, u'VI': 9.748395596649873}
>>> Si.electronegativity('li-xue', charge=4)
{u'IV': 13.16033405547733, u'VI': 9.748395596649873}
Martynov and Batsanov¶
Martynov and Batsanov [7] used the square root of the averaged valence ionization energy as a measure of electronegativity:
where: \(n_{v}\) is the number of valence electrons and \(I_{k}\) is the \(k\) th ionization potential.
Example:
>>> Si.en_martynov_batsanov()
5.0777041564076963
>>> Si.electronegativity(scale='martynov-batsanov')
5.0777041564076963
Mulliken¶
Mulliken scale [36] is defined as the arithmetic average of the ionization potential (\(IP\)) and the electron affinity (\(EA\)):
Example:
>>> Si.en_mulliken()
4.0758415
>>> Si.electronegativity('mulliken')
4.0758415
Nagle¶
Nagle [37] derived his scale from the atomic dipole polarizability:
Example:
>>> Si.electronegativity('nagle')
0.47505611644667534
Pauling¶
Pauling’s thermochemical scale was introduced in [40] as a relative scale based on electronegativity differences:
where: \(E_{d}(XY)\) is the bond dissociation energy of a diatomic \(XY\). The values available in mendeleev are taken from ref. [23].
Example:
>>> Si.en_pauling
1.9
>>> Si.electronegativity('pauling')
1.9
Sanderson¶
Sanderson [49, 50] established his scale of electronegativity based on the stability ratio:
where: \(\rho\) is the average electron density \(\rho=\frac{Z}{4\pi r^{3}/3}\), and \(\rho_{\text{ng}}\) is the average electron density of a hypothetical noble gas atom with charge \(Z\).
Example:
>>> Si.en_sanderson()
0.3468157872145231
>>> Si.electronegativity()
0.3468157872145231
Fetching all electronegativities¶
If you want to fetch all the available scales for all elements you can use the
fetch_electronegativities
function,
that collect all the values into a DataFrame
.
API Reference¶
Here you’ll find API documentation of the mendeleev’s modules.
Implementation of the abstraction for the elctronic configuration object. |
|
Electronegativity scale formulas. |
|
module specifying the database models |
|
Bibliography¶
Kyle & laby tables of physical & chemical constants. (2017). 3.7.5 atomic radii. [Online; accessed 30-April-2017]. URL: http://www.kayelaby.npl.co.uk/chemistry/3_7/3_7_5.html.
Leland C Allen. Electronegativity is the average one-electron energy of the valence-shell electrons in ground-state free atoms. Journal of the American Chemical Society, 111(25):9003–9014, 1989. doi:10.1021/ja00207a003.
Norman L. Allinger, Xuefeng Zhou, and John Bergsma. Molecular mechanics parameters. Journal of Molecular Structure: THEOCHEM, 312(1):69–83, jan 1994. URL: http://linkinghub.elsevier.com/retrieve/pii/S0166128009800080, doi:10.1016/S0166-1280(09)80008-0.
A Louis Allred and E G Rochow. A scale of electronegativity based on electrostatic force. Journal of Inorganic and Nuclear Chemistry, 5(4):264–268, jan 1958. URL: http://linkinghub.elsevier.com/retrieve/pii/0022190258800032, doi:10.1016/0022-1902(58)80003-2.
Santiago Alvarez. A cartography of the van der Waals territories. Dalton Transactions, 42(24):8617, 2013. doi:10.1039/c3dt50599e.
T. Andersen. Atomic negative ions: structure, dynamics and collisions. Physics Reports, 394(4-5):157–313, may 2004. URL: http://linkinghub.elsevier.com/retrieve/pii/S0370157304000316, doi:10.1016/j.physrep.2004.01.001.
Stepan S Batsanov. Dielectric Methods of Studying the Chemical Bond and the Concept of Electronegativity. Russian Chemical Reviews, 51(7):684–697, jul 1982. URL: http://stacks.iop.org/0036-021X/51/i=7/a=R08?key=crossref.14f2fec4c742d81d9efd6ad10be9ac6a, doi:10.1070/RC1982v051n07ABEH002900.
Stepan S Batsanov. Van der Waals radii of elements. Inorganic materials, 37(9):871–885, 2001. URL: http://www.springerlink.com/index/wh8425p357657518.pdf, doi:10.1023/A:1011625728803.
A Bondi. van der Waals Volumes and Radii. The Journal of Physical Chemistry, 68(3):441–451, 1964. URL: http://pubs.acs.org/doi/abs/10.1021/j100785a001, doi:10.1021/j100785a001.
W. Lawrence Bragg. The arrangement of atoms in crystals. Philosophical Magazine, 40(236):169–189, aug 1920. URL: http://www.tandfonline.com/doi/abs/10.1080/14786440808636111, doi:10.1080/14786440808636111.
Xiaolin Chen and Chuangang Ning. Accurate electron affinity of Co and fine-structure splittings of Co\$ˆ-\$ via slow-electron velocity-map imaging. Physical Review A, 93(5):052508, may 2016. URL: http://link.aps.org/doi/10.1103/PhysRevA.93.052508, doi:10.1103/PhysRevA.93.052508.
Xiaolin Chen and Chuangang Ning. Accurate electron affinity of Pb and isotope shifts of binding energies of Pb-. The Journal of Chemical Physics, 145(8):084303, aug 2016. URL: http://scitation.aip.org/content/aip/journal/jcp/145/8/10.1063/1.4961654, doi:10.1063/1.4961654.
X Chu and Alexander Dalgarno. Linear response time-dependent density functional theory for van der Waals coefficients. The Journal of chemical physics, 121(9):4083–8, sep 2004. URL: http://www.ncbi.nlm.nih.gov/pubmed/15332953, doi:10.1063/1.1779576.
Enrico Clementi and D L Raimondi. Atomic Screening Constants from SCF Functions. The Journal of Chemical Physics, 38(11):2686, 1963. URL: http://scitation.aip.org/content/aip/journal/jcp/38/11/10.1063/1.1733573, doi:10.1063/1.1733573.
Enrico Clementi, D L Raimondi, and William P Reinhardt. Atomic Screening Constants from SCF Functions. II. Atoms with 37 to 86 Electrons. The Journal of Chemical Physics, 47(4):1300, 1967. URL: http://scitation.aip.org/content/aip/journal/jcp/47/4/10.1063/1.1712084, doi:10.1063/1.1712084.
Beatriz Cordero, Verónica Gómez, Ana E Platero-Prats, Marc Revés, Jorge Echeverría, Eduard Cremades, Flavia Barragán, and Santiago Alvarez. Covalent radii revisited. Dalton Transactions, pages 2832, 2008. URL: http://xlink.rsc.org/?DOI=b801115j, doi:10.1039/b801115j.
T. L. Cottrell and L. E. Sutton. Covalency, Electrovalency and Electronegativity. Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences, 207(1088):49–63, jun 1951. URL: http://rspa.royalsocietypublishing.org/cgi/doi/10.1098/rspa.1951.0098, doi:10.1098/rspa.1951.0098.
Dulal C Ghosh. A NEW SCALE OF ELECTRONEGATIVITY BASED ON ABSOLUTE RADII OF ATOMS. Journal of Theoretical and Computational Chemistry, 04(01):21–33, mar 2005. URL: http://www.worldscientific.com/doi/abs/10.1142/S0219633605001556, doi:10.1142/S0219633605001556.
Henning Glawe, Antonio Sanna, E K U Gross, and Miguel A L Marques. The optimal one dimensional periodic table: a modified Pettifor chemical scale from data mining. New Journal of Physics, 18(9):093011, sep 2016. URL: http://stacks.iop.org/1367-2630/18/i=9/a=093011?key=crossref.32680d846cd18e9182d769c453b6099e, doi:10.1088/1367-2630/18/9/093011.
Walter Gordy. A New Method of Determining Electronegativity from Other Atomic Properties. Physical Review, 69(11-12):604–607, jun 1946. URL: http://link.aps.org/doi/10.1103/PhysRev.69.604, doi:10.1103/PhysRev.69.604.
Tim Gould and Tomáš Bučko. C6 Coefficients and Dipole Polarizabilities for All Atoms and Many Ions in Rows 1-6 of the Periodic Table. Journal of Chemical Theory and Computation, 12(8):3603–3613, aug 2016. URL: http://pubs.acs.org/doi/abs/10.1021/acs.jctc.6b00361, doi:10.1021/acs.jctc.6b00361.
W.M. Haynes. CRC Handbook of Chemistry and Physics. CRC Press, 97th edition, 2016. ISBN 9781498754293. URL: https://books.google.no/books?id=VVezDAAAQBAJ.
William M Haynes. CRC Handbook of Chemistry and Physics. 100 Key Points. CRC Press, London, 95th edition, 2014. ISBN 9781482208689. URL: https://books.google.no/books?id=bNDMBQAAQBAJ.
Stephen R. Heller, Alan McNaught, Igor Pletnev, Stephen Stein, and Dmitrii Tchekhovskoi. Inchi, the iupac international chemical identifier. Journal of Cheminformatics, 7:23, 2015. [Online; accessed 25-September-22], IUPAC link: http://www.iupac.org/inchi/. URL: https://doi.org/10.1186/s13321-015-0068-4, doi:10.1186/s13321-015-0068-4.
F.G. Kondev, M. Wang, W.J. Huang, S. Naimi, and G. Audi. The NUBASE2020 evaluation of nuclear physics properties \ast . Chinese Physics C, 45(3):030001, mar 2021. Data file: https://www.anl.gov/sites/www/files/2022-11/nubase_4.mas20.txt. URL: https://doi.org/10.1088/1674-1137/abddae, doi:10.1088/1674-1137/abddae.
A Kramida, Yu Ralchenko, J Reader, and and NIST ASD Team. Nist atomic spectra database (ver. 5.3), national institute of standards and technology, gaithersburg, md. 2015. [Online; accessed 13-April-2015]. URL: http://physics.nist.gov/asd.
Keyan Li and Dongfeng Xue. Estimation of Electronegativity Values of Elements in Different Valence States. The Journal of Physical Chemistry A, 110(39):11332–11337, oct 2006. URL: http://pubs.acs.org/doi/abs/10.1021/jp062886k, doi:10.1021/jp062886k.
KeYan Li and DongFeng Xue. New development of concept of electronegativity. Chinese Science Bulletin, 54(2):328–334, jan 2009. URL: http://link.springer.com/10.1007/s11434-008-0578-9, doi:10.1007/s11434-008-0578-9.
Daniel Lundberg and Ingmar Persson. The size of actinoid(iii) ions - structural analysis vs. common misinterpretations. Coordination Chemistry Reviews, 318:131–134, 2016. URL: https://www.sciencedirect.com/science/article/pii/S0010854515300862, doi:https://doi.org/10.1016/j.ccr.2016.04.003.
Zhihong Luo, Xiaolin Chen, Jiaming Li, and Chuangang Ning. Precision measurement of the electron affinity of niobium. Physical Review A, 93(2):020501, feb 2016. URL: http://link.aps.org/doi/10.1103/PhysRevA.93.020501, doi:10.1103/PhysRevA.93.020501.
Joseph B Mann, Terry L Meek, and Leland C Allen. Configuration Energies of the Main Group Elements. Journal of the American Chemical Society, 122(12):2780–2783, mar 2000. URL: http://pubs.acs.org/doi/abs/10.1021/ja992866e, doi:10.1021/ja992866e.
Joseph B Mann, Terry L Meek, Eugene T Knight, Joseph F Capitani, and Leland C Allen. Configuration Energies of the d-Block Elements. Journal of the American Chemical Society, 122(21):5132–5137, may 2000. URL: http://pubs.acs.org/doi/abs/10.1021/ja9928677, doi:10.1021/ja9928677.
Manjeera Mantina, Adam C Chamberlin, Rosendo Valero, Christopher J Cramer, and Donald G Truhlar. Consistent van der Waals Radii for the Whole Main Group. The Journal of Physical Chemistry A, 113(19):5806–5812, may 2009. URL: http://pubs.acs.org/doi/abs/10.1021/jp8111556, doi:10.1021/jp8111556.
Stephen L. Mayo, Barry D. Olafson, and William A Goddard III. DREIDING: a generic force field for molecular simulations. The Journal of Physical Chemistry, 94(26):8897–8909, dec 1990. URL: http://pubs.acs.org/doi/abs/10.1021/j100389a010, doi:10.1021/j100389a010.
Juris Meija, Tyler B. Coplen, Michael Berglund, Willi A. Brand, Paul De Bièvre, Manfred Gröning, Norman E. Holden, Johanna Irrgeher, Robert D. Loss, Thomas Walczyk, and Thomas Prohaska. Atomic weights of the elements 2013 (IUPAC Technical Report). Pure and Applied Chemistry, 88(3):265–291, jan 2016. URL: http://www.degruyter.com/view/j/pac.2016.88.issue-3/pac-2015-0305/pac-2015-0305.xml, doi:10.1515/pac-2015-0305.
Robert S Mulliken. A New Electroaffinity Scale; Together with Data on Valence States and on Valence Ionization Potentials and Electron Affinities. The Journal of Chemical Physics, 2(11):782, 1934. URL: http://scitation.aip.org/content/aip/journal/jcp/2/11/10.1063/1.1749394, doi:10.1063/1.1749394.
Jeffrey K. Nagle. Atomic polarizability and electronegativity. Journal of the American Chemical Society, 112(12):4741–4747, jun 1990. URL: http://pubs.acs.org/doi/abs/10.1021/ja00168a019, doi:10.1021/ja00168a019.
National Institute of Standards and Technology. Nist chemistry webbook, standard reference database number 69. [Online; accessed 27-September-2022]. URL: https://webbook.nist.gov/chemistry/.
Robert G. Parr, László v. Szentpály, and Shubin Liu. Electrophilicity index. Journal of the American Chemical Society, 121(9):1922–1924, 1999. URL: https://doi.org/10.1021/ja983494x, arXiv:https://doi.org/10.1021/ja983494x, doi:10.1021/ja983494x.
Linus Pauling. THE NATURE OF THE CHEMICAL BOND. IV. THE ENERGY OF SINGLE BONDS AND THE RELATIVE ELECTRONEGATIVITY OF ATOMS. Journal of the American Chemical Society, 54(9):3570–3582, sep 1932. URL: http://pubs.acs.org/doi/abs/10.1021/ja01348a011, doi:10.1021/ja01348a011.
D G Pettifor. A chemical scale for crystal-structure maps. Solid State Communications, 51(1):31–34, jul 1984. URL: http://www.sciencedirect.com/science/article/pii/0038109884907658, doi:10.1016/0038-1098(84)90765-8.
Pekka Pyykkö and Michiko Atsumi. Molecular Double-Bond Covalent Radii for Elements Li-E112. Chemistry - A European Journal, 15(46):12770–12779, nov 2009. URL: http://doi.wiley.com/10.1002/chem.200901472, doi:10.1002/chem.200901472.
Pekka Pyykkö and Michiko Atsumi. Molecular Single-Bond Covalent Radii for Elements 1-118. Chemistry - A European Journal, 15(1):186–197, jan 2009. URL: http://doi.wiley.com/10.1002/chem.200800987, doi:10.1002/chem.200800987.
Pekka Pyykkö, Sebastian Riedel, and Michael Patzschke. Triple-Bond Covalent Radii. Chemistry - A European Journal, 11(12):3511–3520, jun 2005. URL: http://doi.wiley.com/10.1002/chem.200401299, doi:10.1002/chem.200401299.
Martin Rahm, Roald Hoffmann, and N. W. Ashcroft. Atomic and Ionic Radii of Elements 1-96. Chemistry - A European Journal, 22(41):14625–14632, oct 2016. URL: http://doi.wiley.com/10.1002/chem.201602949, doi:10.1002/chem.201602949.
Martin Rahm, Roald Hoffmann, and N. W. Ashcroft. Corrigendum: Atomic and Ionic Radii of Elements 1-96. Chemistry - A European Journal, 23(16):4017–4017, mar 2017. URL: http://doi.wiley.com/10.1002/chem.201700610, doi:10.1002/chem.201700610.
A K Rappe, C. J. Casewit, K. S. Colwell, William A Goddard III, and W. M. Skiff. UFF, a full periodic table force field for molecular mechanics and molecular dynamics simulations. Journal of the American Chemical Society, 114(25):10024–10035, dec 1992. URL: http://pubs.acs.org/doi/abs/10.1021/ja00051a040, doi:10.1021/ja00051a040.
R Scott Rowland and Robin Taylor. Intermolecular Nonbonded Contact Distances in Organic Crystal Structures: Comparison with Distances Expected from van der Waals Radii. The Journal of Physical Chemistry, 100(18):7384–7391, 1996. doi:10.1021/jp953141+.
R T Sanderson. An Interpretation of Bond Lengths and a Classification of Bonds. Science, 114(2973):670–672, dec 1951. URL: http://www.sciencemag.org/cgi/doi/10.1126/science.114.2973.670, doi:10.1126/science.114.2973.670.
R T Sanderson. An Explanation of Chemical Variations within Periodic Major Groups. Journal of the American Chemical Society, 74(19):4792–4794, oct 1952. URL: http://pubs.acs.org/doi/abs/10.1021/ja01139a020, doi:10.1021/ja01139a020.
Peter Schwerdtfeger and Jeffrey K. Nagle. 2018 Table of static dipole polarizabilities of the neutral elements in the periodic table. Molecular Physics, 0(0):1–26, oct 2018. URL: https://doi.org/00268976.2018.1535143 https://www.tandfonline.com/doi/full/10.1080/00268976.2018.1535143, doi:10.1080/00268976.2018.1535143.
R. D. Shannon. Revised effective ionic radii and systematic studies of interatomic distances in halides and chalcogenides. Acta Crystallographica Section A, 32(5):751–767, 1976. doi:10.1107/S0567739476001551.
John C Slater. Atomic Radii in Crystals. The Journal of Chemical Physics, 41(10):3199, 1964. URL: http://scitation.aip.org/content/aip/journal/jcp/41/10/10.1063/1.1725697, doi:10.1063/1.1725697.
N Stone. Table of nuclear quadrupole moments, international atomic energy agency, indc(nds)-650. December 2013. URL: https://www-nds.iaea.org/publications/indc/indc-nds-0650.pdf.
N Stone. Table of nuclear magnetic dipole and electric quadrupole moments, international atomic energy agency, indc(nds)-0658. February 2014. URL: https://www-nds.iaea.org/publications/indc/indc-nds-0658.pdf.
K T Tang, J M Norbeck, and P R Certain. Upper and lower bounds of two- and three-body dipole, quadrupole, and octupole van der Waals coefficients for hydrogen, noble gas, and alkali atom interactions. The Journal of Chemical Physics, 64(7):3063, 1976. URL: http://scitation.aip.org/content/aip/journal/jcp/64/7/10.1063/1.432569, doi:10.1063/1.432569.
P. Villars, K. Cenzual, J. Daams, Y. Chen, and S. Iwata. Data-driven atomic environment prediction for binaries using the Mendeleev number. Journal of Alloys and Compounds, 367(1-2):167–175, mar 2004. URL: http://linkinghub.elsevier.com/retrieve/pii/S0925838803008004, doi:10.1016/j.jallcom.2003.08.060.
Jürgen Vogt and Santiago Alvarez. van der Waals Radii of Noble Gases. Inorganic Chemistry, 53(17):9260–9266, sep 2014. URL: http://pubs.acs.org/doi/abs/10.1021/ic501364h, doi:10.1021/ic501364h.
W M White. Geochemistry. Wiley, 2013. ISBN 9781118485255. URL: https://books.google.no/books?id=QPH1nY8WztkC.
Wikipedia. Goldschmidt classification — wikipedia, the free encyclopedia. [Online; accessed 30-April-2017]. URL: https://en.wikipedia.org/w/index.php?title=Goldschmidt_classification&oldid=775842423.
Wikipedia. Cpk coloring — wikipedia, the free encyclopedia. 2017. [Online; accessed 5-October-2017]. URL: https://en.wikipedia.org/w/index.php?title=CPK_coloring&oldid=802098372.
IUPAC-CIAAW. Atomic masses. [Online; accessed 25-September-2022, data file: https://ciaaw.org/data/IUPAC-atomic-masses.csv, last updated: 17 March 2021]. URL: https://ciaaw.org/atomic-masses.htm.
IUPAC-CIAAW. Standard atomic weights. [Online; accessed 1-January-2017]. URL: http://www.ciaaw.org/atomic-weights.htm.
Jmol Team. Jmol colors. [Online; accessed 5-October-2017]. URL: http://jmol.sourceforge.net/jscolors/#color_U.
MOLCAS Team. Molcas gv colors. [Online; accessed 5-October-2017]. URL: http://www.molcas.org/GV/.
Wikipedia contributors. List of chemical elements — Wikipedia, the free encyclopedia. 2021. [Online; accessed 30-August-2021]. URL: https://en.wikipedia.org/w/index.php?title=List_of_chemical_elements&oldid=1039678864.
Wikipedia contributors. Oxidation state — Wikipedia, the free encyclopedia. 2022. [Online; accessed 28-September-2022]. URL: https://en.wikipedia.org/w/index.php?title=Oxidation_state&oldid=1102394064.
mendeleev Changelog¶
v0.15.0 (26.12.2023)¶
[FIX] Fix a few issues with README.md by @paulromano in #119
[MNT] Remove six dependency by @paulromano in #120
[FIX] Update abundance for 126Te isotope by @lmmentel in #123
[MNT] add python 3.12 support and bump various package versions @lmmentel in #134
v0.14.0 (07.06.2023)¶
v0.13.1 (24.04.2023)¶
v0.13.0 (11.04.2023)¶
v0.12.1 (28.11.2022)¶
v0.12.0 (9.10.2022)¶
v0.11.0 (29.09.2022)¶
v0.10.0 (17.07.2022)¶
Corrected specific heat capacity values with CRC Handbook of Chemistry and Physics as the data source Issue #60
Renamed specific_heat attribute to specific_heat_capacity PR #61 (for backwards compatibility specific_heat will still work)
Added molar_heat_capacity property from CRC Handbook of Chemistry and Physics PR #61
Corrected wrong units in the docs for specific_heat Issue #59
Fixed usage of pytest.approx after api change PR #62
Refactored format call to f-strings PR #62
Updated locked dependencies to eliminate known vulnerabilities PR #63
Added python 3.10 to CI workflows to increase test coverage PR #62
v0.9.0 (24.09.2021)¶
Correct density data with CRC Handbook of Chemistry and Physics as the data source PR #39 that fixes issue #38.
Fixed plotly based visualizations not rendering at https://mendeleev.readthedocs.io.
Added DOI number.
v0.8.0 (22.08.2021)¶
Enable visualizations of periodic tables with plotly as well as bokeh backends through
mendeleev.vis.plotly.periodic_table_plotly
andmendeleev.vis.bokeh.periodic_table_bokeh
functions.Add
mendeleev.vis.periodic_table
function for convenient periodic table plotting wrapping both plotting backends.Refactored the
mendeleev.vis
module so it can be wasily extended with plotting backends.Add
CITATION.cff
file.
v0.7.0 (20.03.2021)¶
Update ionic and crytal radii for III+ actinoids.
Refactor electronegativity calculations for easier calculation and retrieval of the different scales.
Add fetch.py module with methods for accessing bulk data.
Add oxides methods to Element that returns possible oxides (Issue #17).
Add tutorials on fetching data and electronic configuration.
tables.py is renamed to models.py.
Switch from pipenv to poetry for development.
Switch from travis CI to github actions and extend testing matrix to Win and MacOS.
Documentation udpate.
v0.6.1 (03.11.2020)¶
Add electrophilicity index.
Pin sqlalchemy version to prevent further issues with old versions, see Issue #22
v0.6.0 (10.04.2020)¶
Add Ion class to handle atomic ions.
Add Github templates for bug reports, feature requests and pull requests.
Update the values of atomic_radius_rahm according to corrigendum, (PR #13).
Switch the default documentation theme to material with sphinx-material.
v0.5.2 (29.01.2020)¶
Fix a
UnicodeDecodeError
from README.md while installing on windows.Code quality improvements based on lgtm.com
v0.5.1 (26.08.2019)¶
Fix issue #3,
get_table('elements')
throwing an error
v0.5.0 (25.08.2019)¶
Migrate the package from bitbucket to github
Add Pettifor scale:
pettifor_number
attributeAdd Glawe scale:
glawe_number
attributeRestore default printing of isotopic abundancies, fix issue #9
Correct the oxidation states for Xe, fix issue #10
v0.4.5 (17.03.2018)¶
Update dipole polarizability value to the latest recommended (2018)
v0.4.4 (10.12.2018)¶
v0.4.3 (16-07-2018)¶
Added
mendeleev_number
attribute to elements.Added footnotes to the data documentation.
v0.4.2 (26-12-2018)¶
Fixed issue #3: encoding issue in econf.py.
v0.4.1 (03-12-2017)¶
Corrected passing integers to the CLI script.
Various documentation readability and structure improvements.
v0.4.0 (22-11-2017)¶
The elements can now be directly imported from mendeleev by symbols.
Added sphinxcontrib.bibtex extension to the docs to handle BibTeX style references to improve handling of the bibliographic entries.
Added nbsphinx to include Jupyter Notebook tutorials in the docs.
v0.3.6 (17-09-2017)¶
Added API documentation
Corrected the sphinx configuration
Updated the documentation
v0.3.5 (07-09-2017)¶
Added a module with functions to scrape data from ciaaw.org
Added new
Element
attributes,name_origin
,uses
andsources
Added new
Element
attributes related to the discovery:discoverers
,discovery_location
,discovery_year
v0.3.4 (28-06-2017)¶
Fixed python2.7 compatibility issue
Added double and triple bond covalent radii from Pyykko
Corrected minor error in the documentation
Replaced lazy loading with eager in db queries
v0.3.3 (16-05-2017)¶
Corrected the coordination of Br5+ ion in the ionic radii table
v0.3.2 (01-05-2017)¶
Added
metallic_radius
Added Goldschmidt and geochemical classifications
Corrected the docs configuration
Added
cas
number attributeAdded atomic radii by Rahm et al.
Created a conda recipe
Added a citation information to the readme
Electronic configuration code was split into a separate module
v0.3.1 (25-01-2017)¶
Added new properties of isotopes:
spin
,g_factor
,quadrupole_moment
v0.3.0 (09-01-2017)¶
Updates of the documentation and tutorials
Added radioactive isotope half-lifes
v0.2.17 (08-01-2017)¶
Extended the schema for isotopes with additional attributes and updated the values of abundancies, half lifes and mass uncertainties.
Updates to the tutorials and docs.
v0.2.16 (06-01-2017)¶
Corrected the radioactive attribute of Th, Pa and U elements.
v0.2.15 (02-01-2017)¶
Patched the sphinx configuration.
v0.2.14 (02-01-2017)¶
Patched typos in README.
v0.2.13 (01-01-2017)¶
Updated atomic weight with the newest IUPAC and CIAAW recommendations.
Added
is_radioactive
andis_monoisotopic
attributes.Updated the docs.
v0.2.12 (21-12-2016)¶
Got rid of the scipy dependency.
v0.2.11 (10-11-2016)¶
Updated the names and symbols of elements 113, 115, 117, 118.
Updated the docs.
v0.2.10 (18-10-2016)¶
Added the C6 coefficients from Gould and Bucko.
Added van der Waals radii from Alvarez.
v0.2.9 (16-10-2016)¶
Added a scale of electronegativities by Ghosh.
v0.2.8 (29-08-2016)¶
Updated the electron affinity of Pb and Co.
Updates of the docs.
v0.2.7 (02-04-2016)¶
Maintenance.
v0.2.6 (02-04-2016)¶
Mainly maintenance updates to docs, sphinx
conf.py
,setup.py
, requirements.
v0.2.5 (02-04-2016)¶
Features added¶
Added calculation of Martynov and Batsanov scale of electronegativity in
en_martynov_batsanov
method in theElement
classAdded
abundance_crust
andabundance_sea
with element abundancies in the crust and seasAdded
molcas_gv_color
attribute with MOLCAS GV colors
Bugs fixed¶
Restored Python 3.x compatibility
v0.2.4 (05-02-2016)¶
Features added¶
Extended and corrected the documentation and Jupyter notebook tutorials on basic usage electronegativities, plotting and tables
Bugs fixed¶
Corrected
raise
toreturn
when callingen_sanderson
fromelectronegativity
Fixed and tested the formula for calculating the Li and Xue scale of electronegativity in
en_lie-xue
v0.2.3 (27-01-2016)¶
Features added¶
Added new vdW radii:
vdw_radius_batsanov
,vdw_radius_bondi
,vdw_radius_dreiding
,vdw_radius_mm3
,vdw_radius_rt
,vdw_radius_truhlar
,vdw_radius_uff
Added an option to plot the long (wide) version of the periodic table in
periodic_plot
Bugs fixed¶
Typos in the docstrings
v0.2.2 (29-11-2015)¶
Features added¶
Added new covalent radii:
covalent_radius_bragg
,covalent_radius_slater
Added the
c6
dispersion coefficientsAdded
gas_basicity
,proton_affinity
andheat_of_formation
Added
periodic_plot
function for producing bokeh <https://bokeh.org/> based plots of the periodic tableAdded
jmol_color
andcpk_color
with different coloring schemes for atoms
Bug fixes¶
Changed the series of elements 113, 114, 115, 116 to poor metals
v0.2.1 (26-10-2015)¶
Features added¶
Extended the list of options for calculating Mulliken electronegativities in
en_mulliken
Added
electrons_per_shell
methodAdded a function to calculate linear interpolation of radii required for calculation of Sandersons electronegativity
Added hybrid attributes
electrons
,protons
,neutrons
andmass_number
Bug fixes¶
Changed the type of the
melting_point
fromstr
tofloat
v0.2.0 (22-10-2015)¶
Features added¶
Instead of
covalent_radius
addedcovalent_radius_2008
andcovalent_radius_2009
Instead of
electronegativity
addeden_pauling
anden_mulliken
Added a method for getting ionic radii
Improved the method for calculating the nuclear screening constants
Added
ElectronicConfiguration
class initialized asElement
attributeAdded nuclear screening constants from Clementi and Raimondi
Added a method to calculate the absolute softness, absolute hardness and absolute electronegativity
Added
get_table
method to retrieve the tables aspandas
DataFrames
Bug fixes¶
Added missing electronic configurations
Converted ionic radii from Angstrom to pico meters
v0.1.0 (11-07-2015)¶
First tagged version with the initial structure of the package and first version of the database and the python interface
License¶
The MIT License (MIT)
Copyright (c) 2015 Lukasz Mentel
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.