繁体   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