기본적으로 첫 번째 열이 문자열 (레이블)이고 나머지 열이 숫자 값인 데이터가 많이 있습니다. 다음을 실행합니다.
data = numpy.genfromtxt('data.txt', delimiter = ',')
이것은 대부분의 데이터를 잘 읽지 만 레이블 열은 'nan'이됩니다. 어떻게 처리 할 수 있습니까?
해결 방법
기본적으로 np.genfromtxt
는 dtype = float
를 사용합니다. 따라서 문자열 열이 NaN으로 변환되는 이유는 결국 숫자가 아니기 때문입니다.
dtype = None
을 사용하여 np.genfromtxt
에 열의 실제 유형을 추측하도록 요청할 수 있습니다.
>>> from StringIO import StringIO
>>> test = "a,1,2\nb,3,4"
>>> a = np.genfromtxt(StringIO(test), delimiter=",", dtype=None)
>>> print a
array([('a',1,2),('b',3,4)], dtype=[('f0', '|S1'),('f1', '<i8'),('f2', '<i8')])
a [ 'f0']
...과 같은 이름을 사용하여 열에 액세스 할 수 있습니다.
열이 무엇인지 모르는 경우 dtype = None
을 사용하는 것이 좋습니다. 어떤 유형이 있어야하는지 이미 알고 있다면 명시적인 dtype
을 제공 할 수 있습니다. 예를 들어 테스트에서 첫 번째 열은 문자열이고 두 번째 열은 정수이며 세 번째 열은 부동 소수점이되기를 원합니다. 그런 다음
>>> np.genfromtxt(StringIO(test), delimiter=",", dtype=("|S10", int, float))
array([('a', 1, 2.0), ('b', 3, 4.0)],
dtype=[('f0', '|S10'), ('f1', '<i8'), ('f2', '<f8')])
명시 적 dtype
을 사용하는 것이 dtype = None
을 사용하는 것보다 훨씬 효율적이며 권장되는 방법입니다.
두 경우 모두 ( dtype = None
또는 명시적이고 비 동종 dtype
) 구조화 된 배열이됩니다.
[참고 : dtype = None
을 사용하면 입력이 두 번 구문 분석되고 각 열의 유형이 가능한 더 큰 유형과 일치하도록 업데이트됩니다. 먼저 bool을 시도한 다음 int를 시도한 다음 float를 시도합니다. , 컴플렉스, 다른 모든 것이 실패하면 문자열을 유지합니다. 실제로 구현은 다소 투박합니다. 유형 추측을보다 효율적으로 만들려는 시도가 있었지만 (정규식 사용), 지금까지 멈춘 것은 없습니다.]
참조 페이지 https://stackoverflow.com/questions/12319969
'파이썬' 카테고리의 다른 글
파이썬 matplotlib에서 동적으로 서브 플롯 추가 / 생성 (0) | 2021.02.07 |
---|---|
파이썬 Python에서 파일을 어떻게 복사합니까? (0) | 2021.02.07 |
파이썬 Latex를 사용하여 렌더링 할 때 matplotlib 플롯에서 축 눈금 글꼴을 어떻게 변경합니까? (0) | 2021.02.07 |
파이썬 Pandas : 고유 한 데이터 프레임 (0) | 2021.02.07 |
파이썬 Windows에서 setup.py를 통해 Python 모듈을 설치하는 방법은 무엇입니까? (0) | 2021.02.07 |
댓글