2017-10-17 3 views
1

빈 데이터 프레임부터 시작하여 테이블 이름 목록을 기반으로 SQL 문에서 새 dataFrames를 가져온 다음 시작 데이터 프레임에 각 데이터 프레임을 추가합니다. 예 :DataFrames를 추가 할 때 "데이터 형식을 이해하지 못했습니다."

df1 = pd.DataFrame() 
for name in tableslist: 
    perT = pd.read_sql_query("SELECT FROM myschema.{0} WHERE username = '{1}'.format(name,user),engine) 
    df1 = df1.append(perT) 
오류를 반환

: 터미널에서 data type not understood. 나는 그것이 append 행 (print 서술문으로 확인한 것)에 기인한다고 확신한다. 그 원인은 무엇일까요? perT가 행이없는 테이블 일 수 있습니다. 그게 문제 야? 각 테이블의 머리 부분을 인쇄 해 보았지만 그 오류/실패의 원인을 판별 할 수는 없습니다.

+0

확실 쿼리 당신이 기다리고있어 무엇을주고 있습니까? 개별적으로 실행 해보십시오. –

+0

mysql 쿼리를 별도로 실행하고 query 출력에 text/csv 파일을 수집 한 다음'df '에 추가하십시오. 문제를 정확히 파악하는 데 도움이 될 수 있습니다. –

답변

1

이전 버전의 팬더에서는 날짜 필드가 데이터 프레임에있는 경우 (특히 datetime64 변형) 발생할 수 있음을 발견했습니다. 과거에는 여러 가지 해결 방법 (아래 참조)을 사용하여 데이터를 보지 않고 무엇이 도움이되는지 정확히 알 수 없었습니다.

  1. 모든 날짜 입력란을 팬더 타임 스탬프 (df[col_name].apply(pd.Timestamp))로 전송합니다.
  2. 모든 날짜 필드를 문자열로 캐스팅합니다 (df[col_name].astype(str)).
  3. 초기 데이터 프레임은 빈 데이터 프레임입니다. 비어 있지 않은 데이터 프레임을 비어있는 데이터 프레임에 추가하는 대신 초기 비어있는 데이터 프레임을 비어 있지 않은 첫 번째 데이터 프레임과 같게 설정 한 다음 추가로 유지하십시오.

    if df1.empty: 
        df1 = perT 
    else: 
        df1 = df1.append(perT) 
    
  4. 업그레이드 팬더 :

+0

3 단계와 4 단계를 수행했습니다. 빈 데이터 프레임을 추가하려고 시도했을 때 오류가 발생했다고 생각합니다 (전체 데이터 프레임에 빈 데이터 프레임 추가 또는 빈 데이터 프레임에 빈 데이터 프레임 추가). 감사합니다 – Acoustic77