CSV에서 가져온 데이터로 작업하고 있습니다. 팬더가 일부 열을 부동으로 변경 했으므로 이제이 열의 숫자가 부동 소수점으로 표시됩니다! 그러나 정수로 표시하거나 쉼표없이 표시해야합니다. 정수로 변환하거나 쉼표를 표시하지 않는 방법이 있습니까?
df = df.astype(int)
CSV에서 가져온 데이터로 작업하고 있습니다. 팬더가 일부 열을 부동으로 변경 했으므로 이제이 열의 숫자가 부동 소수점으로 표시됩니다! 그러나 정수로 표시하거나 쉼표없이 표시해야합니다. 정수로 변환하거나 쉼표를 표시하지 않는 방법이 있습니까?
df = df.astype(int)
답변:
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
df.a = df.a.astype(float)
합니까? 이것은 사본을 작성합니까 ( copy
param이 어떻게 astype()
사용 되는지 확실하지 않습니까)? 어쨌든 "in place"유형을 업데이트 하시겠습니까?
DF.({'200': {'#': 354, '%': 0.9971830985915493}, '302': {'#': 1, '%': 0.0028169014084507044}})
. #은 부동으로 변환되며 열이 아닌 행입니다. 각각 Series
단일 유니폼 유형 만 저장할 수 있기 때문에 ?
dtype
입니까? 그렇다면 혼합 할 수 있도록 dtype
열을 만들어야합니다 dtype
object
. 그렇지 않으면 플로트를 사용하고 비교를 할 때 조언을 사용하는 것이 좋습니다np.isclose
이 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
ValueError: ('cannot convert float NaN to integer', u'occurred at index <column_name>')
df['C'] = df['C'].dropna().apply(np.int64)
pandas.DataFrame
NaN 값을 가질 수있는 경우를 고려하여 부동 소수점에서 정수 로 더 많은 열을 변환하려는 경우 빠른 솔루션입니다 .
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 ""
.
""
col
@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의 새로운 기능
>>> 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
다음은 정보를 잃지 않는 가장 작은 정수 유형으로 다운 캐스트되는 간단한 함수입니다. 예를 들어,
100.0은 float에서 정수로 변환 할 수 있지만 99.9는 반올림 또는 잘림으로 정보를 잃지 않고는 변환 할 수 없습니다
또한 1.0은 int8
정보 손실없이 계속 다운 캐스트 될 수 있지만 100_000.0의 가장 작은 정수 유형은int32
코드 예 :
import numpy as np
import pandas as pd
def float_to_int( s ):
if ( s.astype(np.int64) == s ).all():
return pd.to_numeric( s, downcast='integer' )
else:
return s
# small integers are downcast into 8-bit integers
float_to_int( np.array([1.0,2.0]) )
Out[1]:array([1, 2], dtype=int8)
# larger integers are downcast into larger integer types
float_to_int( np.array([100_000.,200_000.]) )
Out[2]: array([100000, 200000], dtype=int32)
# if there are values to the right of the decimal
# point, no conversion is made
float_to_int( np.array([1.1,2.2]) )
Out[3]: array([ 1.1, 2.2])
df.col = df.col.astype(int)