팬더에서 플로트를 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.DataFrame
NaN 값을 가질 수 있는 경우를 고려하여 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
오류: {'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
)
플로트가 이미 둥글게 되어 있는 경우는, 다음과 같이 합니다.
df = pd.DataFrame({'A': [99.0, np.nan, 42.0]}) df['A'] = df['A'].astype('Int64') # A # 0 99 # 1 <NA> # 2 42
플로트가 아직 반올림되지 않은 경우 이전:
df = pd.DataFrame({'A': [3.14159, np.nan, 1.61803]}) df['A'] = df['A'].round().astype('Int64') # A # 0 3 # 1 <NA> # 2 2
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
'programing' 카테고리의 다른 글
설치된 모듈을 가져올 수 없습니다. (0) | 2022.12.26 |
---|---|
Java 서블릿의 POST 요청에서 요청 페이로드 가져오기 (0) | 2022.12.26 |
vuejs2에서 "사용자 입력 중지 후 양식 제출"을 수행하는 방법 (0) | 2022.12.26 |
html 폼태그의 목적은 무엇입니까? (0) | 2022.12.26 |
Jackson을 사용하여 JSON을 ArrayList로 역직렬화 (0) | 2022.12.26 |