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.0 와 1.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
출력 파일에.
에 대한 설명 %g
은 Format Specification Mini-Language를 참조하십시오 .
업데이트 : 답변은 작성 당시 정확했으며 부동 소수점 정밀도는 to_csv / read_csv (정밀 성능 절충, 기본값은 성능 선호)에서 기본적으로 얻는 것이 아닙니다.
요즘이 에 해당하는 인수 및 사용할 인수 .float_format
pandas.DataFrame.to_csv
float_precision
pandas.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
'Program Tip' 카테고리의 다른 글
sed 특정 문자열을 포함하지 않는 줄 삭제 (0) | 2020.12.11 |
---|---|
JSONException : java.lang.String 유형의 값을 JSONObject로 변환 할 수 없습니다. (0) | 2020.12.11 |
angularjs를 사용한 두 개의 중첩 클릭 이벤트 (0) | 2020.12.10 |
Otto 이벤트 버스를 사용하여 서비스에서 활동으로 이벤트를 보내는 방법은 무엇입니까? (0) | 2020.12.10 |
사용자 이름과 암호를 제공하지 않고 공유 폴더에 액세스하는 방법 (0) | 2020.12.10 |