Drijvers converteren naar inten in Panda’s?

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.DataFramewilt 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=ignoreargument 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'})

Other episodes