Program Tip

Pandas to_csv가있는 float64

programtip 2020. 12. 11. 19:17
반응형

Pandas to_csv가있는 float64


다음과 같은 부동 숫자가 포함 된 CSV를 읽고 있습니다.

Bob,0.085
Alice,0.005

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

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

이제 이것은 다음 pandasfile과 같습니다.

Bob,0.085000000000000006
Alice,0.0050000000000000001

무슨 일이야? 아마도 float32 같은 다른 유형으로 캐스팅해야할까요?

임 사용 팬더 0.9.01.6.2 NumPy와 .


주석에서 언급했듯이 일반적인 부동 소수점 문제입니다.

그러나의 float_format키워드 를 사용하여 to_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

출력 파일에.

에 대한 설명 %gFormat Specification Mini-Language를 참조하십시오 .


업데이트 : 답변은 작성 당시 정확했으며 부동 소수점 정밀도는 to_csv / read_csv (정밀 성능 절충, 기본값은 성능 선호)에서 기본적으로 얻는 것이 아닙니다.

요즘이 에 해당하는 인수사용할 인수 .float_formatpandas.DataFrame.to_csvfloat_precisionpandas.from_csv

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


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

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 파일을 만드는 것이 좋습니다. 응용 프로그램 내에서 평소와 같이 CSV 파일을 읽으면 해당 정수 수치를 다시 얻을 수 있습니다. 그런 다음 이전에 곱한 것과 동일한 계수로 나눈 값을 부동 소수점으로 변환합니다.

참고 URL : https://stackoverflow.com/questions/12877189/float64-with-pandas-to-csv

반응형