JMP 데이터 테이블을 Python에 Pandas 데이터 프레임으로 전달JMP 이전 버전(JMP 18 이전)에서는 JMP 데이터 테이블을 Python에 전달하면 기본적으로 Pandas 데이터 프레임이었습니다(매우 훌륭함). 안타깝게도 JMP 18에서는 해당 기능이 제거된 것 같습니다. PythonSend()를 사용하여 데이터 테이블을 Python에 전달한 후 모든 열을 반복하고 다음과 같은 작업을 수행하여 Numpy 배열로 전환해야 합니다.
df = pd.DataFrame()
for i in range( len(cols) ):
df[ cols[i].name ] = np.array( cols[i] )
그리고 이는 대규모 데이터 테이블의 경우 시간이 많이 걸립니다. JMP와 Python을 많이 활용하는 고객(NVIDIA)으로부터 이러한 부정적인 피드백을 받았습니다.
이 변환을 수행하지 않고도 데이터 테이블을 Pandas 데이터 프레임으로 Python에 전달할 수 있는 방법이 있습니까? 아니면 기본적으로 이 작업을 수행하는 PythonSend()의 JMP 17 기능을 다시 가져올 수 있습니까?
감사해요,
표시
Re: JMP 데이터 테이블을 Python에 Pandas 데이터 프레임으로 전달합니다.JMP 18에서는 다음과 같은 방법을 사용합니다.
import pandas as pd
import jmp
# open the JMP data table
tablepath=<PATHNAME string="">dt=jmp.open(tablepath) # dt=jmp.current() 또는 dt=jmp.table(<'tablename'>)을 사용할 수도 있습니다. # JMP 테이블을 팬더 데이터 프레임으로 변환하는 함수를 정의합니다. def jmpTableToDataFrame(dt): # JMP DataTable에서 직접 Pandas 데이터프레임을 생성합니다. df = pd.DataFrame() for idx in range( len(dt) :(</img> print(dt[idx].name) if dt[idx].dtype == jmp.DataType.Numeric: # Python의 버퍼를 사용하여 직접 숫자 열을 생성합니다. 프로토콜 col = np.array( dt[idx] ) df[ dt[idx].name ] = col.tolist() # 팬더용 목록으로 만듭니다. elif dt[idx].dtype == jmp.DataType.Character: # 값을 반복하여 목록을 만듭니다. col = list() for i in range ( dt.nrows :(</img> col.append(dt[idx][i]) # 목록에서 문자 열 작성 df[ dt[idx].name ] = col else: print( dt[idx].dtype ) return df # JMP 테이블을 팬더 데이터 프레임으로 변환 df = jmpTableToDataFrame(dt); 인쇄(df)</PATHNAME>
Re: JMP 데이터 테이블을 Python에 Pandas 데이터 프레임으로 전달합니다.열을 통한 반복이 JMP 17의 동작보다 훨씬 더 빠르다는 점을 지적하고 싶습니다. 이 모든 일은 메모리 내에서 발생합니다. JMP 14-17은 JMP 데이터 테이블을 임시 CSV 파일로 디스크에 기록한 후 Pandas에서 CSV 파일로 파일을 다시 읽습니다. 한 고객은 전송 프로세스에서 15분이 소요되는 200M .jmp 파일을 3G CSV로 확장했습니다. 이전 방법은 또한 바이너리를 텍스트로 변환한 다음 텍스트를 다시 바이너리로 변환하므로 데이터 정밀도가 손실될 가능성이 있었습니다.
정말로 이전 방법을 사용하고 싶다면 SAMPLE_SCRIPTS/Python/dt2pandas.py에 to_pandas(dt) 함수로 포함되어 있습니다. jmp.DataTable 객체를 취하고 pandas.DataFrame을 반환합니다.
Python Send(dt)를 기본값으로 pandas.DataFrame을 보내도록 설정하지 않을 것입니다. jmp.DataTable 객체는 Python 코드에 Python에서 라이브로 JMP 데이터 테이블을 조작하고 처리할 수 있는 기능을 제공하지만 pandas는 그렇지 않습니다.
이는 JMP 14-17의 Python을 사용하는 사용자가 적응해야 할 가장 큰 변화가 될 것입니다. 그러나 최악의 경우 이전 방식으로 수행하려는 경우 전송 후 코드에 import dt2pandas 및 pd = to_pandas(dt) 1개의 추가 import 문이 있습니다. 또는 동등하게 함수의 열에 대한 코드 반복을 래핑하고 이를 호출하여 jmp.DataTable 객체에서 메모리 내 팬더 데이터 프레임을 생성합니다.
Re: JMP 데이터 테이블을 Python에 Pandas 데이터 프레임으로 전달합니다.내 블로그 게시물도 참조하세요.
https://community.jmp.com/t5/JMPer-Cable/New-in-JMP-18-Python-jmp-DataTable-and-pandas-DataFrame/ba-p/744680
Re: JMP 데이터 테이블을 Python에 Pandas 데이터 프레임으로 전달합니다.폴님 좋은 설명 감사드립니다! 나는 사용자가 성능 차이에 주의를 기울인 것이 아니라 PythonSend()의 동작 차이를 알아차렸다고 생각합니다. 이 주제가 나오면 이 성능 향상을 지적하여 버그가 아닌 기능으로 인식되도록 하는 것이 중요합니다. 이 주제에 관해 귀하의 훌륭한 블로그 게시물을 Nvidia와 공유하겠습니다.
Re: JMP 데이터 테이블을 Python에 Pandas 데이터 프레임으로 전달합니다.안녕하세요, 샘/폴 님,
귀하가 공유한 이 기능이 JMP 데이터 테이블을 Pandas 데이터 프레임으로 변환하는 가장 잘 알려진 방법으로 간주됩니까? 이는 모든 JMP/Python 사용자에게 보편적으로 사용될 것입니다. JMP Python 라이브러리에 포함하는 것이 타당하다고 생각될 만큼 너무 많습니까?