[英]Pandas read_sql DataTypes
我必須比較兩個數據源,以查看同一記錄是否在所有行中都相同。 一種數據源來自Excel文件,另一種數據源來自SQL表。 我嘗試使用DataFrame.equals()
就像我過去一樣。
但是,此問題是由於討厭的數據類型問題引起的。 即使數據看起來一樣,數據類型也會使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
我可以嘗試使用pd.read_excel()
的converters
參數來匹配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}))
怎么樣
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)
如果您看到“ Object” dtype,則表示熊貓無法將某些行解釋為日期,因此將整個列強制轉換為Object(基本上是字符串)
查看有關dtypes,轉換器和parse_dates參數的文檔: https ://pandas.pydata.org/pandas-docs/stable/genic/pandas.read_csv.html
您還可以檢查dayfirst參數以正確解析日期。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.