1

많은 고정 폭 데이터 파일을 읽고 csv로 변환 할 수있는 Python 스크립트를 설정하려고합니다. 나는이 같은 pandas을 사용하고이 작업을 수행하려면Python Pandas를 사용하여 데이터 유형 해석없이 고정 폭 파일 읽기

pandas.read_fwf('source.txt', colspecs=column_position_length).\ 
     to_csv('output.csv', header=column_name, index=False, encoding='utf-8') 

경우 column_position_lengthcolumn_name는 데이터를 읽고 쓰는 데 필요한 정보를 포함하는 목록입니다.

이 파일에는 테스트 답변을 나타내는 긴 문자열이 있습니다. 예 : 333133322122222223133313222222221222111133313333은 객관식 시험에서 정답을 나타냅니다. 따라서 이것은 숫자 값보다 더 많은 코드입니다. 내가 겪고있는 문제는 판다 (pandas)가이 값을 수레로 해석 한 다음이 값을 CSV (3.331333221222221e + 47)에 과학 표기법으로 쓰는 것입니다.

이 문제와 관련하여 많은 질문을 발견했지만 문제를 해결하지 못했습니다.

  1. Solution 1 - 저는이 시점에서 값이 이미 수레로 변환되어 도움이되지 않을 것이라고 생각합니다.
  2. Solution 2 - 팬더에 따라 documentation, dtype은 Python의 read_fwf에 대한 인수로 지원되지 않습니다.
  3. 솔루션 3 변환기 사용 - 변환기를 사용할 때의 문제는 데이터 형식으로 변환 할 열 이름이나 인덱스를 지정해야하지만 모든 열을 문자열로 읽고 싶습니다.

두 번째 옵션은 모든 열을 문자열로 읽는 것에 대한 답변으로 보이지만 불행히도 read_fwf에는 지원되지 않습니다. 어떤 제안?

+2

'dtype' _is_ supported이고, yes로 설정하면'object'로 설정하는 것이 최적의 해결책이 될 것입니다. – DyZ

+0

dtype : 열의 유형 이름 또는 dict -> 유형, 기본값 없음 데이터 또는 열의 데이터 유형. 예 : { 'a': np.float64, 'b': np.int32} (지원되지 않는 엔진 = '파이썬'). dtype을 보존하고 해석하지 않으려면 str 또는 object를 사용하십시오. http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_fwf.html – dselgo

답변

1

그래서 해결책을 찾은 것 같지만 그 이유는 모르겠습니다. 팬더는 열에 NaN 값 (빈 줄)이 있었기 때문에 이러한 값을 수레로 해석했습니다. read_fwf() 매개 변수에 keep_default_na=False을 추가하여이 문제를 해결했습니다. documentation에 따르면

keep_default_na : na_values ​​지정 및 keep_default_na 경우 부울, 기본값은 TRUE하는 NaN의 값이 무시되는 기본 False입니다, 그렇지 않으면 그들은 추가하고 있습니다.

내 생각에이 문제가 어떻게 해결되는지 잘 모르겠다. 누구나 이것에 명확성을 더할 수 있을까요?

관련 문제