모든 레코드에서 동일한 레코드가 동일한 지 확인하려면 두 데이터 소스를 비교해야합니다. 하나의 데이터 소스는 Excel 파일에서 가져 오며 다른 하나는 SQL 테이블에서 가져옵니다. 나는 과거에 사용했던 것처럼 DataFrame.equals()
을 사용해 보았습니다.Pandas read_sql DataTypes
그러나이 문제는 성가신 데이터 유형 문제로 인한 것입니다. 데이터가과 같다고하더라도 데이터 유형은 excel_df.loc[excel_df['ID'] = 1].equals(sql_df.loc[sql_df['ID'] = 1])
으로 돌아오고 False
이됩니다. pd.read_sql
에서
COLUMN ID int64
ANOTHER Id float64
SOME Date datetime64[ns]
Another Date datetime64[ns]
같은 열 : 내가 SQL에 맞게 pd.read_excel()
에서 converters
인수를 사용하여 시도 할 수
COLUMN ID float64
ANOTHER Id float64
SOME Date object
Another Date object
여기 pd.read_excel()
에서 데이터 유형의 예입니다. 또는 또한 df['Column_Name] = df['Column_Name].astype(dtype_here)
하고 있지만 나는 많은 열을 다루고있다. 모든 열에서 값을 확인하는 더 쉬운 방법이 있습니까? 팬더가 할 수있는 것을 의미한다 "개체"DTYPE 당신이 표시되는 경우 방법에 대한
excel_df = pd.read_excel(...)
sql_df = pd.read_sql(...)
# attempt to cast all columns of excel_df to the types of sql_df
excel_df.astype(sql_df.dtypes.to_dict()).equals(sql_df)
나는 이것이 효과가 있었으면 좋겠다. 'TypeError : 데이터 유형을 이해하지 못했습니다. ' – MattR
이 대답은 나를 반 (半) 사용 가능한 답으로 이끌었습니다. 나는 루프를 만들었고 이것은'TypeError'를 반환하지 않습니다. 그러나 일부 데이터 유형 (날짜와 우편 번호는'int '로 읽히는'str')과 같이 변경해야했습니다. 답변을 업데이트하고 싶다면 커뮤니티에 동의 할 수 있습니다. df1.columns.tolist()의 열에 대해 : df1 [열] = df1 [열] .astype (sql_df [열] .dtype)'올바른 들여 쓰기를 사용해야합니다. – MattR
@Matt, 어떤 팬더 버전을 사용하고 있습니까? –