복붙노트

[SQL] 일반적인 열 두 dataframes 가입

SQL

일반적인 열 두 dataframes 가입

나는 두 개의 데이터 소스, 주문 및 고객을 가입하려는 :

주문은 SQL Server 테이블입니다 :

orderid| customerid | orderdate | ordercost
------ | -----------| --------- | --------
12000  | 1500       |2008-08-09 |  38610

고객은 csv 파일은 다음과 같습니다

customerid,first_name,last_name,starting_date,ending_date,country
1500,Sian,Read,2008-01-07,2010-01-07,Greenland

나는 다음과 같은 코드를 작성, 그래서 난 내 파이썬 응용 프로그램에서이 두 테이블을 조인 할 :

# Connect to SQL Sever with Pyodbc library

connection = pypyodbc.connect("connection string here")
cursor=connection.cursor();
cursor.execute("SELECT * from order)
result= cursor.fetchall()

# convert the result to pandas Dataframe
df1 = pd.DataFrame(result, columns= ['orderid','customerid','orderdate','ordercost'])

# Read CSV File
df2=pd.read_csv(customer_csv)

# Merge two dataframes
merged= pd.merge( df1, df2, on= 'customerid', how='inner')
print(merged[['first_name', 'country']])

나는 기대

first_name | country
-----------|--------
Sian       | Greenland

하지만 빈 결과를 얻을.

내가 CSV 파일에서 모두 두 개의 데이터 프레임이 코드를 수행 할 때, 그것을 잘 작동합니다. 어떤 도움?

감사.

해결법

  1. ==============================

    1.나는 문제는 CustomerID를 열 것입니다 전혀 일치하므로 두 DataFrames 다른 dtypes을 가지고 생각합니다.

    나는 문제는 CustomerID를 열 것입니다 전혀 일치하므로 두 DataFrames 다른 dtypes을 가지고 생각합니다.

    그래서 STR에 INT 또는 둘 모두에 열을 변환 할 필요가있다.

    df1['customerid'] = df1['customerid'].astype(int)
    df2['customerid'] = df2['customerid'].astype(int)
    

    또는:

    df1['customerid'] = df1['customerid'].astype(str)
    df2['customerid'] = df2['customerid'].astype(str)
    

    또한 가능한 생략은 어떻게 = '내부'때문에 병합의 기본 값 :

    merged= pd.merge( df1, df2, on= 'customerid')
    
  2. ==============================

    2.당신이 두 프레임에서 일치하는 값이없는 pd.merge 수단에 대한 dataframe 결과를 비 웁니다. 당신은 데이터의 유형을 확인 했습니까? 사용하다

    당신이 두 프레임에서 일치하는 값이없는 pd.merge 수단에 대한 dataframe 결과를 비 웁니다. 당신은 데이터의 유형을 확인 했습니까? 사용하다

    df1['customerid'].dtype
    

    확인하다.

    뿐만 아니라 (다른 대답 제안), 당신은 또한 당신이 CSV를 읽을 때 당신이 원하는 D- 타입 무엇 팬더을 알 수 있습니다 가져온 후 변환 등

    df2=pd.read_csv(customer_csv, dtype={'customerid': str))
    
  3. from https://stackoverflow.com/questions/42947303/join-two-dataframes-on-common-column by cc-by-sa and MIT license