programing

팬더에서 플로트를 ints로 변환?

sourcetip 2022. 12. 26. 22:01
반응형

팬더에서 플로트를 ints로 변환?

CSV에서 가져온 데이터로 작업하고 있습니다.판다는 떠다니기 위해 기둥을 바꾸어서, 이제 이 기둥의 숫자는 부동소수로 표시됩니다!단, 정수로 표시하거나 쉼표 없이 표시해야 합니다.정수로 변환하거나 쉼표를 표시하지 않는 방법이 있습니까?

플로트 출력을 수정하려면 다음 절차를 수행합니다.

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

함수를 사용하여 열 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

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

때 할 수 입니다.pandas.DataFrameNaN 값을 가질 수 있는 경우를 고려하여 float에서 정수로 변경합니다.

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) 번호가 에, 저는 「 number」를 else "".

@ G가 한 @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

팬더한테.DataFrame.astype 문서:

오류: {'raise', 'rest' , 기본 'raise'

제공된 dtype에 대해 잘못된 데이터에 대한 예외 발생을 제어합니다.

  • raise : 예외가 발생할 수 있습니다.
  • ignore : 예외를 억제합니다.오류 발생 시 원래 개체 반환

버전 0.20.0의 신기능.

int로 변환해야 하는 열은 사전에서도 다음과 같이 언급할 수 있습니다.

df = df.astype({'col1': 'int', 'col2': 'int', 'col3': 'int'})

'Int64' NaN 지원용

  • astype(int) ★★★★★★★★★★★★★★★★★」astype('int64') 결측값을 처리할 수 없습니다(numpy int).
  • astype('Int64') 결측값을 처리할 수 있습니다(interface int).
df['A'] = df['A'].astype('Int64') # capital I

이것은 결측값을 NaN으로 유지하는 것을 전제로 하고 있습니다.이라면, 「」를 참조해 .fillna라이언의 제안대로 먼저요


의 예'Int64')I)

  1. 플로트가 이미 둥글게 되어 있는 경우는, 다음과 같이 합니다.

    df = pd.DataFrame({'A': [99.0, np.nan, 42.0]})
    
    df['A'] = df['A'].astype('Int64')
    #       A
    # 0    99
    # 1  <NA>
    # 2    42
    
  2. 플로트가 아직 반올림되지 않은 경우 이전:

    df = pd.DataFrame({'A': [3.14159, np.nan, 1.61803]})
    
    df['A'] = df['A'].round().astype('Int64')
    #       A
    # 0     3
    # 1  <NA>
    # 2     2
    
  3. int+ int+NaN을 합니다.dtype='Int64'변환할 필요가 전혀 없습니다.

    csv = io.StringIO('''
    id,rating
    foo,5
    bar,
    baz,2
    ''')
    
    df = pd.read_csv(csv, dtype={'rating': 'Int64'})
    #     id  rating
    # 0  foo       5
    # 1  bar    <NA>
    # 2  baz       2
    

메모들

  • 'Int64'는 다음 에일리어스입니다.

    df['A'] = df['A'].astype(pd.Int64Dtype()) # same as astype('Int64')
    
  • 크기/서명된 별칭을 사용할 수 있습니다.

    하한 상한선
    'Int8' -128 127
    'Int16' -32,768 32,767
    'Int32' -2,147,483,648 2,147,483,647
    'Int64' -9,223,372,036,854,775,808 9,223,372,036,854,775,807
    'UInt8' 0 255
    'UInt16' 0 65,535
    'UInt32' 0 4,294,967,295
    'UInt64' 0 18,446,744,073,709,551,615
>>> 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

질문 본문에서는 데이터가 csv에서 나온다고 설명했습니다.소, 데이터를 읽을 때 변환하는 옵션과 그 이후의 변환은 관련이 없다고 생각합니다.

데이터 프레임에 스프레드시트 또는 CSV를 가져올 때 Excel은 모든 숫자 값을 플로트로 저장하고 기본 라이브러리의 작동 방식을 저장하므로 일반적으로 "정수 열만 플로트로 변환됩니다.

파일을 read_excel 또는 read_csv로 읽을 경우 Import 후 변환을 회피하는 옵션이 몇 가지 있습니다.

  • 파라미터dtype다음과 같은 열 이름과 대상 유형의 사전을 전달할 수 있습니다.dtype = {"my_column": "Int64"}
  • 파라미터converters예를 들어 NaN을 0으로 변경하는 등 변환을 하는 함수를 통과시키는 데 사용할 수 있습니다.converters = {"my_column": lambda x: int(x) if x else 0}
  • 파라미터convert_float는, 「통합 플로트」를 int(즉, 1.0 –> 1)로 변환합니다만, NaN과 같은 코너 케이스는 주의해 주세요.이 파라미터는 다음에서만 사용할 수 있습니다.read_excel

기존 데이터 프레임으로 변환하기 위해 다른 코멘트에서 몇 가지 대안이 제공되었지만 v1.0.0 판다에는 이러한 경우 convert_dtypes라는 흥미로운 기능이 있으므로 "dtypes를 사용하여 pd를 지원하는 dtype을 사용하여 열을 가능한 최선의 dtype으로 변환합니다.'NA'

예:

In [3]: import numpy as np                                                                                                                                                                                         

In [4]: import pandas as pd                                                                                                                                                                                        

In [5]: df = pd.DataFrame( 
   ...:     { 
   ...:         "a": pd.Series([1, 2, 3], dtype=np.dtype("int64")), 
   ...:         "b": pd.Series([1.0, 2.0, 3.0], dtype=np.dtype("float")), 
   ...:         "c": pd.Series([1.0, np.nan, 3.0]), 
   ...:         "d": pd.Series([1, np.nan, 3]), 
   ...:     } 
   ...: )                                                                                                                                                                                                          

In [6]: df                                                                                                                                                                                                         
Out[6]: 
   a    b    c    d
0  1  1.0  1.0  1.0
1  2  2.0  NaN  NaN
2  3  3.0  3.0  3.0

In [7]: df.dtypes                                                                                                                                                                                                  
Out[7]: 
a      int64
b    float64
c    float64
d    float64
dtype: object

In [8]: converted = df.convert_dtypes()                                                                                                                                                                            

In [9]: converted.dtypes                                                                                                                                                                                           
Out[9]: 
a    Int64
b    Int64
c    Int64
d    Int64
dtype: object

In [10]: converted                                                                                                                                                                                                 
Out[10]: 
   a  b     c     d
0  1  1     1     1
1  2  2  <NA>  <NA>
2  3  3     3     3

여기에는 많은 옵션이 있지만 사전을 사용하여 특정 열의 형식을 변환할 수도 있습니다.

Data = pd.read_csv('Your_Data.csv')

Data_2 = Data.astype({"Column a":"int32", "Column_b": "float64", "Column_c": "int32"})

print(Data_2 .dtypes) # Check the dtypes of the columns

이는 빠른 데이터 분석을 위해 특정 열의 데이터 형식을 변경할 수 있는 편리하고 매우 빠른 방법입니다.

언급URL : https://stackoverflow.com/questions/21291259/convert-floats-to-ints-in-pandas

반응형