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