pandas read_csv에서 예를 들어 지정할 수있는 방법이 있습니다. col1, col15, wholeline?pandas 데이터 프레임 read_csv, 열을 지정하고 전체 줄을 문자열로 유지
'^'가 구분 기호로 사용되며 텍스트 한정자와 캐리지 리턴이 줄 구분 기호로 사용되는 텍스트 파일에서 약 700000 개의 데이터 행을 가져 오려고합니다.
텍스트 파일에서 필자는 1 열 15 열을 필요로하고 테이블/데이터 프레임의 3 열에 전체 줄이 필요합니다.
나는 팬더에서 이것을하는 방법을 연구했지만 논리를 이해할만큼 잘 모릅니다. 26 열 모두를 제대로 가져올 수는 있지만 문제가 해결되지 않습니다.
my_df = pd.read_csv("tablefile.txt", sep="^", lineterminator="\r", low_memory=False)
표준 파이썬을 사용하여 데이터를 테이블에 넣을 수 있지만 700000 행의 경우 약 4 시간이 소요됩니다. 그것은 나를 위해 너무 길다.
count_1 = 0
for line in open('tablefile.txt'):
if count_1 > 70:
break
else:
col1id = re.findall('^(\d+)\^', line)
col15id = re.findall('^.*\^.*\^(\d+)\^.*\^.*\^.*\^.*\^.*\^.*\^.*\^.*\^.*\^.*\^.*', line)
line = line.strip()
count_1 = count_1 + 1
cur.execute('''INSERT INTO mytable (mycol1id, mycol15id, wholeline) VALUES (?, ?, ?)''',
(col1id[0], col15id[0], line,))
conn.commit()
print('row count_1=',count_1)
팬더 read_csv에서, 예를 지정하는 방법이있다. col1, col15, wholeline?
상기에서와 같이, col1
및 col15
이 자리하고 wholeline
문자열 내가 그 과정에서 일부 문자가 손실 될 수 있습니다로 가져온 후 문자열을 다시하고 싶지 않아
- 입니다.
감사
편집
: 각 라인에 대한 데이터베이스에 커밋 는 연소 시간이었다.
파이썬 만 사용하는 경우 루프 외부에서 정규 표현식을 한 번 컴파일해야합니다. 이것은 일을 가속화해야합니다 –
이것이 어떻게 작동하는지 이해하지 못합니다. re.findall (regex, object) re.findall을 호출하기 전에 필요한 객체를 작성해야한다고 생각했습니다. 당신은 모범이 있습니까? – CArnold