programing

float64 with 팬더 to_csv

subpage 2023. 8. 22. 22:10
반응형

float64 with 팬더 to_csv

다음과 같은 부동 소수점이 있는 CSV를 읽고 있습니다.

Bob,0.085
Alice,0.005

데이터 프레임으로 가져와서 이 데이터 프레임을 새 위치에 씁니다.

df = pd.read_csv(orig)
df.to_csv(pandasfile)

, 이제 자, 거pandasfile예외:

Bob,0.085000000000000006
Alice,0.0050000000000000001

무슨 일이죠? 플로트32 같은 다른 타입으로 캐스팅해야 하나요?

저는 판다 0.9.01.6.2를 사용하고 있습니다.

댓글에 언급된 것처럼 일반적인 부동소수점 문제입니다.

은 그나사수다있니를 할 수 .float_formatto_csv숨김:

df.to_csv('pandasfile.csv', float_format='%.3f')

0.0001을 0으로 반올림하지 않으려면 다음을 수행합니다.

df.to_csv('pandasfile.csv', float_format='%g')

다음을 제공합니다.

Bob,0.085
Alice,0.005

출력 파일에 있습니다.

을 위하여에 .%g소형 언어 형식 지정을 참조하십시오.

업데이트: 작성 시 답변은 정확했으며 부동소수점 정밀도는 여전히 to_csv/read_csv(정밀-성능 균형 조정, 기본값은 성능 선호)를 통해 기본적으로 얻을 수 있는 것이 아닙니다.

요즘에는 에 대한 인수와 에 대한 인수있습니다.

그 문제를 더 잘 이해하기 위해 원본은 여전히 읽을 가치가 있습니다.


그것은 "to_csv" 기능뿐만 아니라 "read_csv" 기능에서도 판다의 버그였습니다.부동소수점 연산이 프로그래머의 주의를 필요로 하는 주제인 은 사실이지만 일반적인 부동소수점 문제는 아닙니다.아래의 이 기사는 이 주제에 대해 약간 설명합니다.

http://docs.python.org/2/tutorial/floatingpoint.html

"문제"를 보여주는 전형적인 원라이너는...

>>> 0.1 + 0.1 + 0.1
0.30000000000000004

예상했던 것처럼 0.3을 표시하지 않습니다.반면에 고정점 산술을 사용하여 계산을 처리하고 마지막 단계에서만 부동점 산술을 사용하면 예상대로 작동합니다.참조:

>>> (1 + 1 + 1)  * 1.0 / 10
0.3

이 문제를 해결해야 하는 경우에는 모든 수치를 정수로 포함하는 다른 CSV 파일을 생성하는 것이 좋습니다. 예를 들어 100, 1000 또는 편리한 것으로 판명된 다른 요인을 곱하는 것이 좋습니다.응용 프로그램 내에서 CSV 파일을 평소와 같이 읽으면 정수 값이 반환됩니다.그런 다음 이러한 값을 이전에 곱한 것과 동일한 요인으로 나누어 부동 소수점으로 변환합니다.

저는 이 문제에 직면했고 이것이 제가 찾은 해결책입니다.(다른 솔루션을 사용해 보았지만 제대로 작동하지 않았습니다.)

먼저 원하는 소수점 이하로 반올림한 다음 csv로 내보냅니다.

다음을 시도해 보십시오.

df = df.astype(float).round(3)
df.to_csv('pandasfile.csv')

언급URL : https://stackoverflow.com/questions/12877189/float64-with-pandas-to-csv

반응형