2016-06-29 3 views
4

셸을 통해 사용자 입력을 읽도록 Argparse 파서를 설정 중입니다. 입력은 문자열과 숫자가 포함 된 pandas DataFrame에서 데이터를 추출하는 데 사용됩니다. Argparse .add_argument()에서 type= 인수를 자동으로 설정하여 해당 열의 데이터 유형과 일치 시키려고합니다.argparse에서 numpy 데이터 형식 사용

for c in inputdata.columns: 
     inputname= c 
     inputtype= np.dtype(inputdata[c]) 
     parser.add_argument("--"+inputname, type=inputtype) 

그러나이 작동하지 않습니다 :

내 생각은 inputdata 가 DataFrame이다이 같은 Argparse 인수를 설정했다 파이썬은 ValueError: dtype('int64') is not callable 발생합니다. 나는 그것이 Numpy 파일 유형에 맞지 않기 때문에 이것이라고 생각합니다. 예 : 입력 유형을 float으로 설정하면 계획대로 진행됩니다. 수동으로 type=np.int64을 입력하면 Argparse도 문제가 없습니다.

  • 어떻게 루프에서 INT64객체 위에 표시된 즉, 내 DataFrame의 파일 형식을 적용받을 수 있습니까? 일부 옵션 인 here도 사용해 보았습니다. dtype.type하지만 아무 것도 효과가 없습니다.

  • 아니면 그냥 가능하지 않습니까? Argparse docs 상태 해당

일반적인 종류의 내장 기능은 형식 인수

의 값으로 직접 사용하지만 난 그 위에 말했듯이 NumPy와 데이터 유형 잘 보인다 될 수있다 명시 적으로 입력하면.

도움 주셔서 감사합니다.

+1

이 문맥에서'callable'은 대개 문자열을 (입력 내용을) 받아서 다른 것으로 변환하는 함수입니다. 그리고 입력 문자열이 잘못 형성되었다는 오류가 발생합니다. 'np.int64 ('123')'이 작동합니다. 'np.dtype ('int64') ('123')'그렇지 않습니다. – hpaulj

답변

5

사용

inputtype = np.dtype(inputdata[c]).type 

또는

inputtype = inputdata[c].dtype.type 

.type 속성은 호출하고, 그 DTYPE의 새로운 인스턴스를 만들 수 있습니다.

+0

은 매력처럼 작동합니다. 감사합니다. – patrick