Desimaalipisteet pilkuiksi

Pythonissa käytetään desimaalierottimena pistettä. Seuraavassa esittelen funktiot, joilla voin vaihtaa desimaalierottimeksi pilkun. Huomaa, että tämän jälkeen luvut ovat merkkijonoja eikä niitä sellaisenaan voi enää käyttää laskennassa.

In [9]:
import pandas as pd

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.

In [10]:
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 + ' %'
In [11]:
# Avaan datan
df = pd.read_excel('http://taanila.fi/data1.xlsx')
In [12]:
# Lasken tunnuslukuja
df1 = df.describe()

# Korvaan pisteet pilkuilla
for col in df1.columns:
    df1[col] =  df1[col].apply(pilkut)

df1
Out[12]:
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
In [14]:
# Frekvenssitaulukko koulutuksesta

df2 = pd.crosstab(df['koulutus'], 'n')
df2['%'] = df2/df2.sum()*100
df2
Out[14]:
col_0 n %
koulutus
1.0 27 33.333333
2.0 30 37.037037
3.0 22 27.160494
4.0 2 2.469136
In [15]:
# Pisteet pilkuiksi
df2['%'] = df2['%'].apply(pilkutp)
df2
Out[15]:
col_0 n %
koulutus
1.0 27 33,3 %
2.0 30 37,0 %
3.0 22 27,2 %
4.0 2 2,5 %
In [16]:
# Ristiintaulukointi, prosentit (normalize) sarakkeiden mukaan
df3 = pd.crosstab(df['koulutus'], df['sukup'], normalize = 'columns')
df3
Out[16]:
sukup 1 2
koulutus
1.0 0.354839 0.263158
2.0 0.370968 0.368421
3.0 0.241935 0.368421
4.0 0.032258 0.000000
In [17]:
# Pisteet pilkuiksi
for col in df3.columns:
    df3[col] =  (df3[col]*100).apply(pilkutp)
df3
Out[17]:
sukup 1 2
koulutus
1.0 35,5 % 26,3 %
2.0 37,1 % 36,8 %
3.0 24,2 % 36,8 %
4.0 3,2 % 0,0 %