[python] Pandas에서 float를 정수로 변환 하시겠습니까?

CSV에서 가져온 데이터로 작업하고 있습니다. 팬더가 일부 열을 부동으로 변경 했으므로 이제이 열의 숫자가 부동 소수점으로 표시됩니다! 그러나 정수로 표시하거나 쉼표없이 표시해야합니다. 정수로 변환하거나 쉼표를 표시하지 않는 방법이 있습니까?



답변

float 출력을 수정하려면 다음을 수행하십시오.

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


답변

pandas.DataFrame.astype(<type>)함수를 사용하여 열 dtype을 조작 하십시오 .

>>> 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

편집하다:

결 측값을 처리하려면 다음을 수행하십시오.

>>> 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


답변

다음 데이터 프레임을 고려하십시오.

>>> 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

열 이름 목록을 사용하여 다음을 사용하여 여러 열의 유형을 변경하십시오 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

또는 단일 열의 경우 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


답변

pandas.DataFrameNaN 값을 가질 수있는 경우를 고려하여 부동 소수점에서 정수 로 더 많은 열을 변환하려는 경우 빠른 솔루션입니다 .

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 "")

내가 함께 노력 else x)하고 else None),하지만 결과는 여전히 부동 소수점 수를 가지고있다, 그래서 사용 else "".


답변

@Ryan G에서 언급 된 pandas.DataFrame.astype(<type>)메소드 사용법을 확장 하면 errors=ignore인수를 사용하여 오류가 발생하지 않는 열만 변환 할 수 있으므로 구문이 매우 간단 해집니다. 분명히 오류를 무시할 때는주의를 기울여야하지만이 작업에는 매우 편리합니다.

>>> 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

에서 pandas.DataFrame.astype의 문서 :

오류 : { ‘raise’, ‘ignore’}, 기본 ‘raise’

제공된 dtype에 대해 유효하지 않은 데이터에 대한 예외 발생을 제어합니다.

  • raise : 예외가 발생하도록 허용
  • 무시 : 예외를 억제합니다. 오류 발생시 원본 객체 반환

버전 0.20.0의 새로운 기능


답변

>>> 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


답변

모든 float 열을 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