我必須比較兩個數據源,以查看所有行中的相同記錄是否相同。一個數據源來自Excel文件,另一個來自SQL表。我試過使用DataFrame.equals()
就像我過去一樣。熊貓read_sql數據類型
但是,這個問題是由於討厭的數據類型問題。即使數據看起來相同,數據類型也使excel_df.loc[excel_df['ID'] = 1].equals(sql_df.loc[sql_df['ID'] = 1])
返回False
。下面是從pd.read_excel()
數據類型的例子:
COLUMN ID int64
ANOTHER Id float64
SOME Date datetime64[ns]
Another Date datetime64[ns]
從pd.read_sql
相同的列:
COLUMN ID float64
ANOTHER Id float64
SOME Date object
Another Date object
我可以嘗試使用converters
參數從pd.read_excel()
匹配SQL。或者也在做df['Column_Name] = df['Column_Name].astype(dtype_here)
但我正在處理很多列。是否有更簡單的方法來檢查所有列的值?
檢查pd.read_sql()
有像converters
沒有的事情,但我在尋找類似:
df = pd.read_sql("Select * From Foo", con, dtypes = ({Column_name: str,
Column_name2:int}))
我希望這會奏效。我得到了'TypeError:數據類型不理解' – MattR
這個答案確實使我成爲一個半可用的答案。我創建了一個循環,這不會返回'TypeError'。然而,我確實需要改變一些數據類型(比如日期和郵政編碼爲'str',這些數據類型被讀爲'int')。如果你想更新你的答案,我可以接受它爲社區。這裏是我發現的:'用於df1.columns.tolist()中的列: df1 [column] = df1 [column] .astype(sql_df [column] .dtype)'必須使用適當的縮進。 – MattR
@Matt,你使用的是熊貓版本? –