목표는 명령 행에서 실행되는 load 문 (예 : cat {file_loc} |/path/to/sql - 명령)에 stdin 파이프를 사용하여 DB에 데이터 프레임을로드하는 것입니다. "COPY 테이블에서 DELIMITER ','; "). 나는이 접근법이 차선책이라는 것을 알고있다.)pandas : 구분자가있는 df를 평평하게합니다
데이터 프레임을 압축하여 각 행이 끝에 줄 바꿈을 사용하여 구분 기호로 구분 된 값을 포함하는 문자열이되도록하는 가장 효율적인 방법은 무엇입니까? 내 솔루션은 비효율적 인 것처럼 보입니다.
from pandas import *
import numpy as np
df = DataFrame(np.random.randint(low=0, high=100, size=(5,3)),columns=['A','B','C'])
df2 = df.apply(lambda d: ','.join([`x` for x in d]))
() 또는 이와 유사한가 너무 느립니다 df.to_csv 사용하여 dataframe ...
import timeit
m1="""df2=df.apply(lambda d: ','.join([`x` for x in d]))"""
met1t = timeit.Timer(stmt=m1,setup="from pandas import *; import numpy as np; df = DataFrame(np.random.randint(low=0, high=100, size=(5,3)),columns=['A','B','C'])")
print "Method 1: %.2f usec/pass" % (1000000 * met1t.timeit(number=100000)/100000)
# 381.82 usec/pass
m2="""df.to_csv('testout.csv', index=False, header=False)"""
met2t = timeit.Timer(stmt=m2,setup="from pandas import *; import numpy as np; df = DataFrame(np.random.randint(low=0, high=100, size=(5,3)),columns=['A','B','C'])")
print "Method 2:%.2f usec/pass" % (1000000 * met2t.timeit(number=100000)/100000)
# 551.30 usec/pass
이 가능겠습니까? to_csv에서 최적화 할 수있는 기회 일 수 있습니다. –
@ChangShe : 업데이트 된 시간/결과 시간 – Peter