from datetime import datetime
print(f'Päivitetty {datetime.now().date()} / Aki Taanila')
Päivitetty 2023-05-02 / Aki Taanila
Pythonissa käytetään desimaalierottimena pistettä. Seuraavassa esittelen keinoja vaihtaa desimaalierottimeksi pilkku.
import pandas as pd
Pandas-kirjaston versiosta 1.3.0 lähtien desimaalipisteet voi näyttää pilkkuina style.format-funktion decimal-parametria käyttäen.
# Avaan datan
df = pd.read_excel('https://taanila.fi/data1.xlsx')
# Lasken tunnuslukuja ja esitän tulokset yhdellä desimaalilla desimaalipilkkua käyttäen
df.describe().style.format('{:.1f}', decimal=',')
nro | sukup | ikä | perhe | koulutus | palveluv | palkka | johto | työtov | työymp | palkkat | työteht | työterv | lomaosa | kuntosa | hieroja | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 82,0 | 82,0 | 82,0 | 82,0 | 81,0 | 80,0 | 82,0 | 82,0 | 81,0 | 82,0 | 82,0 | 82,0 | 47,0 | 20,0 | 9,0 | 22,0 |
mean | 41,5 | 1,2 | 38,0 | 1,6 | 2,0 | 12,2 | 2563,9 | 3,1 | 4,1 | 3,2 | 2,1 | 3,2 | 1,0 | 1,0 | 1,0 | 1,0 |
std | 23,8 | 0,4 | 9,8 | 0,5 | 0,8 | 8,8 | 849,4 | 1,1 | 0,8 | 1,2 | 1,1 | 1,0 | 0,0 | 0,0 | 0,0 | 0,0 |
min | 1,0 | 1,0 | 20,0 | 1,0 | 1,0 | 0,0 | 1521,0 | 1,0 | 2,0 | 1,0 | 1,0 | 1,0 | 1,0 | 1,0 | 1,0 | 1,0 |
25% | 21,2 | 1,0 | 31,0 | 1,0 | 1,0 | 3,8 | 2027,0 | 2,0 | 4,0 | 3,0 | 1,0 | 3,0 | 1,0 | 1,0 | 1,0 | 1,0 |
50% | 41,5 | 1,0 | 37,5 | 2,0 | 2,0 | 12,5 | 2320,0 | 3,0 | 4,0 | 3,0 | 2,0 | 3,0 | 1,0 | 1,0 | 1,0 | 1,0 |
75% | 61,8 | 1,0 | 44,0 | 2,0 | 3,0 | 18,2 | 2808,0 | 4,0 | 5,0 | 4,0 | 3,0 | 4,0 | 1,0 | 1,0 | 1,0 | 1,0 |
max | 82,0 | 2,0 | 61,0 | 2,0 | 4,0 | 36,0 | 6278,0 | 5,0 | 5,0 | 5,0 | 5,0 | 5,0 | 1,0 | 1,0 | 1,0 | 1,0 |
# Frekvenssitaulukko koulutuksesta
df1 = pd.crosstab(df['koulutus'], 'f')
df1['%'] = df1/df1.sum()*100
df1.columns.name = ''
df1.index = ['Peruskoulu', '2. aste', 'Korkeakoulu', 'Ylempi korkeakoulu']
# Frekvenssit ilman desimaaleja, prosentit yhdellä desimaalilla, desimaalierottimena pilkku
df1.style.format({'n':'{:.0f}', '%':'{:.1f} %'}, decimal=',')
f | % | |
---|---|---|
Peruskoulu | 27 | 33,3 % |
2. aste | 30 | 37,0 % |
Korkeakoulu | 22 | 27,2 % |
Ylempi korkeakoulu | 2 | 2,5 % |
style.format-funktion decimal-parametri on käytettävissä pandas-versiosta 1.3.0 alkaen. Vanhemmissa versiossa desimaalipisteen vaihtaminen pilkuiksi tarvitsee tehdä toisella tavalla.
Seuraavassa pilkut-funktio pyöristää (round) luvun yhden desimaalin tarkkuuteen ja korvaa merkkijonoksi muutetusta luvusta (str) pisteen pilkulla.
Jos x ei ole luku, niin round-funktio kaatuu virheilmoitukseen. Tässä kaatuminen estetään virheensieppauksella (try - except).
pilkutp-funktio lisää perään välilyönnin ja %-merkin.
def pilkut(x):
try:
x = round(x, 1)
except:
pass
x = str(x).replace('.', ',')
return x
def pilkutp(x):
try:
x = round(x, 1)
except:
pass
x = str(x).replace('.', ',')
return x+' %'
# Lasken tunnuslukuja
df2 = df.describe()
# Korvaan pisteet pilkuilla
for col in df2.columns:
df2[col] = df2[col].apply(pilkut)
df2
nro | sukup | ikä | perhe | koulutus | palveluv | palkka | johto | työtov | työymp | palkkat | työteht | työterv | lomaosa | kuntosa | hieroja | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 82,0 | 82,0 | 82,0 | 82,0 | 81,0 | 80,0 | 82,0 | 82,0 | 81,0 | 82,0 | 82,0 | 82,0 | 47,0 | 20,0 | 9,0 | 22,0 |
mean | 41,5 | 1,2 | 38,0 | 1,6 | 2,0 | 12,2 | 2563,9 | 3,1 | 4,1 | 3,2 | 2,1 | 3,2 | 1,0 | 1,0 | 1,0 | 1,0 |
std | 23,8 | 0,4 | 9,8 | 0,5 | 0,8 | 8,8 | 849,4 | 1,1 | 0,8 | 1,2 | 1,1 | 1,0 | 0,0 | 0,0 | 0,0 | 0,0 |
min | 1,0 | 1,0 | 20,0 | 1,0 | 1,0 | 0,0 | 1521,0 | 1,0 | 2,0 | 1,0 | 1,0 | 1,0 | 1,0 | 1,0 | 1,0 | 1,0 |
25% | 21,2 | 1,0 | 31,0 | 1,0 | 1,0 | 3,8 | 2027,0 | 2,0 | 4,0 | 3,0 | 1,0 | 3,0 | 1,0 | 1,0 | 1,0 | 1,0 |
50% | 41,5 | 1,0 | 37,5 | 2,0 | 2,0 | 12,5 | 2320,0 | 3,0 | 4,0 | 3,0 | 2,0 | 3,0 | 1,0 | 1,0 | 1,0 | 1,0 |
75% | 61,8 | 1,0 | 44,0 | 2,0 | 3,0 | 18,2 | 2808,0 | 4,0 | 5,0 | 4,0 | 3,0 | 4,0 | 1,0 | 1,0 | 1,0 | 1,0 |
max | 82,0 | 2,0 | 61,0 | 2,0 | 4,0 | 36,0 | 6278,0 | 5,0 | 5,0 | 5,0 | 5,0 | 5,0 | 1,0 | 1,0 | 1,0 | 1,0 |
# Aiemmin tehty frekvenssitaulukko koulutuksesta
df1
f | % | |
---|---|---|
Peruskoulu | 27 | 33.333333 |
2. aste | 30 | 37.037037 |
Korkeakoulu | 22 | 27.160494 |
Ylempi korkeakoulu | 2 | 2.469136 |
# Pisteet pilkuiksi (df1 muuttuu pysyvästi)
df1['%'] = df1['%'].apply(pilkutp)
df1
f | % | |
---|---|---|
Peruskoulu | 27 | 33,3 % |
2. aste | 30 | 37,0 % |
Korkeakoulu | 22 | 27,2 % |
Ylempi korkeakoulu | 2 | 2,5 % |
Data-analytiikka Pythonilla https://tilastoapu.wordpress.com/python/