簡體   English   中英

熊貓read_sql數據類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM