2016-06-12 5 views
0

jupiter 노트북 셀로 셸 명령의 출력 (즉, csvkit 도구 호출 체인)을 스트리밍하는 방법을 알고 있지만, 특히 Pandas DataFrame으로 스트리밍하는 방법을 알고 계십니까? 셀의 콘텐츠에서 다음과 같이 보입니다.껍질에서 jupyter 노트북 셀로의 배관

output = !find /path -name "*.csv" | csvstack ... | csvgrep ... 
df = DataFrame.read_csv(output) 

위의 내용 만 실제로 작동하지 않습니다. 셸의 출력은 Pandas가 잘 처리 할 수있는 수백만 행의 매우 큰 출력이지만 출력을 전체적으로 문자열로 메모리에로드하지 않으려합니다.

팬더가 출력을 읽을 수 있도록하는 파이핑/스트리밍 솔루션을 찾고 있습니다.

+0

. @ Dmitry csv를 클립 보드로 읽은 다음 pd. read_clipboard? 마찬가지로, 멀리 팬더 스트림을 처리하지 않습니다 .. – Merlin

답변

0

당신은 STDIN에서 읽을 팬더 수 있도록함으로써 그것을 할 수 IIUC :

파이썬 스크립트를

import sys 
import pandas as pd 
df = pd.read_csv(sys.stdin) 
print(df) 

쉘 명령 행 :

!find /path -name "*.csv" | csvstack ... | csvgrep ... | python our_pyscript.py 

마지막 부분에주의하십시오 : | python our_pyscript.py

chec k this

+0

jupyter 노트북 서버로 실행됩니다. 이것은 작동하지 않을 것이다. –

0

아마도 "명명 ​​된 파이프"가 귀하의 경우에 유용 할 것입니다. 쉘에서

:

mkfifo MYFIFO 
head myfile.txt > MYFIFO 

노트북에서 :

with open('MYFIFO', 'rt') as f: 
    print(f.readline()) 

몇 가지 좋은 인터넷 검색은 당신에게 당신이 안전하고 효율적으로 명명 된 파이프를 사용하는 데 필요한 정보를 제공해야합니다. 행운을 빕니다!

1

해결 방법이 생각났습니다. 실제로는 배관은 아니지만 일부 디스크 I/O 비용이 절약됩니다.

import io 
import pandas as pd 
output = !(your Unix command) 
df = pd.read_table(io.StringIO(output.n))