Ik heb gewerkt met gegevens geïmporteerd uit een CSV. Panda’s veranderden enkele kolommen om te drijven, dus nu worden de cijfers in deze kolommen weergegeven als drijvende punten! Ik heb echter dat ze als gehele getallen worden weergegeven, of, zonder komma. Is er een manier om ze naar gehele getallen te converteren of de komma niet weer te geven?
1, Autoriteit 100%
Om de vlotteruitgang aan te passen, doe dit dan:
df= pd.DataFrame(range(5), columns=['a'])
df.a = df.a.astype(float)
df
Out[33]:
a
0 0.0000000
1 1.0000000
2 2.0000000
3 3.0000000
4 4.0000000
pd.options.display.float_format = '{:,.0f}'.format
df
Out[35]:
a
0 0
1 1
2 2
3 3
4 4
2, Autoriteit 83%
Gebruik de pandas.DataFrame.astype(<type>)
functie om kolom dypes te manipuleren.
>>> df = pd.DataFrame(np.random.rand(3,4), columns=list("ABCD"))
>>> df
A B C D
0 0.542447 0.949988 0.669239 0.879887
1 0.068542 0.757775 0.891903 0.384542
2 0.021274 0.587504 0.180426 0.574300
>>> df[list("ABCD")] = df[list("ABCD")].astype(int)
>>> df
A B C D
0 0 0 0 0
1 0 0 0 0
2 0 0 0 0
EDIT:
Om ontbrekende waarden af te handelen:
>>> df
A B C D
0 0.475103 0.355453 0.66 0.869336
1 0.260395 0.200287 NaN 0.617024
2 0.517692 0.735613 0.18 0.657106
>>> df[list("ABCD")] = df[list("ABCD")].fillna(0.0).astype(int)
>>> df
A B C D
0 0 0 0 0
1 0 0 0 0
2 0 0 0 0
Antwoord 3, autoriteit 19%
Rekening houdend met het volgende gegevensframe:
>>> df = pd.DataFrame(10*np.random.rand(3, 4), columns=list("ABCD"))
>>> print(df)
... A B C D
... 0 8.362940 0.354027 1.916283 6.226750
... 1 1.988232 9.003545 9.277504 8.522808
... 2 1.141432 4.935593 2.700118 7.739108
Gebruik een lijst met kolomnamen en wijzig het type voor meerdere kolommen met applymap()
:
>>> cols = ['A', 'B']
>>> df[cols] = df[cols].applymap(np.int64)
>>> print(df)
... A B C D
... 0 8 0 1.916283 6.226750
... 1 1 9 9.277504 8.522808
... 2 1 4 2.700118 7.739108
Of voor een enkele kolom met apply()
:
>>> df['C'] = df['C'].apply(np.int64)
>>> print(df)
... A B C D
... 0 8 0 1 6.226750
... 1 1 9 9 8.522808
... 2 1 4 2 7.739108
Antwoord 4, autoriteit 7%
Dit is een snelle oplossing voor het geval je meer kolommen van je pandas.DataFrame
wilt converteren van float naar integer, ook in het geval dat je NaN-waarden kunt hebben.
cols = ['col_1', 'col_2', 'col_3', 'col_4']
for col in cols:
df[col] = df[col].apply(lambda x: int(x) if x == x else "")
Ik heb het geprobeerd met else x)
en else None)
, maar het resultaat is nog steeds het float-nummer, dus ik gebruikte else ""
.
Antwoord 5, autoriteit 6%
om alle float-kolommen om te zetten naar INT
>>> df = pd.DataFrame(np.random.rand(5, 4) * 10, columns=list('PQRS'))
>>> print(df)
... P Q R S
... 0 4.395994 0.844292 8.543430 1.933934
... 1 0.311974 9.519054 6.171577 3.859993
... 2 2.056797 0.836150 5.270513 3.224497
... 3 3.919300 8.562298 6.852941 1.415992
... 4 9.958550 9.013425 8.703142 3.588733
>>> float_col = df.select_dtypes(include=['float64']) # This will select float columns only
>>> # list(float_col.columns.values)
>>> for col in float_col.columns.values:
... df[col] = df[col].astype('int64')
>>> print(df)
... P Q R S
... 0 4 0 8 1
... 1 0 9 6 3
... 2 2 0 5 3
... 3 3 8 6 1
... 4 9 9 8 3
6, Autoriteit 5%
Uitbreiding op @ryan G vermeld gebruik van de pandas.DataFrame.astype(<type>)
-methode, men kan de errors=ignore
argument om alleen te converteren die kolommen die geen fout vormen, die de syntaxis met name vereenvoudigt. Uiteraard moet voorzichtigheid worden toegepast bij het negeren van fouten, maar voor deze taak komt het erg handig.
>>> df = pd.DataFrame(np.random.rand(3, 4), columns=list('ABCD'))
>>> df *= 10
>>> print(df)
... A B C D
... 0 2.16861 8.34139 1.83434 6.91706
... 1 5.85938 9.71712 5.53371 4.26542
... 2 0.50112 4.06725 1.99795 4.75698
>>> df['E'] = list('XYZ')
>>> df.astype(int, errors='ignore')
>>> print(df)
... A B C D E
... 0 2 8 1 6 X
... 1 5 9 5 4 Y
... 2 0 4 1 4 Z
Van pandas.DataFrame.astypedocumenten:
fouten: {‘raise’, ‘ignore’}, standaard ‘raise’
Controleer het verhogen van uitzonderingen op ongeldige gegevens voor verstrekt dtype.
- raise : toestaan dat uitzonderingen worden verhoogd
- negeren: uitzonderingen onderdrukken. Bij fout origineel object retourneren
Nieuw in versie 0.20.0.
Antwoord 7, autoriteit 3%
>>> import pandas as pd
>>> right = pd.DataFrame({'C': [1.002, 2.003], 'D': [1.009, 4.55], 'key': ['K0', 'K1']})
>>> print(right)
C D key
0 1.002 1.009 K0
1 2.003 4.550 K1
>>> right['C'] = right.C.astype(int)
>>> print(right)
C D key
0 1 1.009 K0
1 2 4.550 K1
Antwoord 8, autoriteit 2%
De kolommen die moeten worden geconverteerd naar int kunnen ook in een woordenboek worden vermeld, zoals hieronder
df = df.astype({'col1': 'int', 'col2': 'int', 'col3': 'int'})