首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫read_sql DataTypes

熊猫read_sql DataTypes
EN

Stack Overflow用户
提问于 2017-10-05 20:55:21
回答 2查看 12.2K关注 0票数 4

我必须比较两个数据源,看看在所有行中相同的记录是否相同。一个数据源来自Excel文件,另一个数据源来自SQL。我试着像过去一样使用DataFrame.equals()

然而,这个问题是由令人讨厌的数据类型问题造成的。尽管数据看起来是一样的,但数据类型使excel_df.loc[excel_df['ID'] = 1].equals(sql_df.loc[sql_df['ID'] = 1])返回False。下面是来自pd.read_excel()的数据类型的一个示例

代码语言:javascript
复制
COLUMN ID                         int64
ANOTHER Id                      float64
SOME Date                datetime64[ns]
Another Date             datetime64[ns] 

来自pd.read_sql的相同列

代码语言:javascript
复制
COLUMN ID                        float64
ANOTHER Id                       float64
SOME Date                         object
Another Date                      object

我可以尝试使用来自converterspd.read_excel()参数来匹配pd.read_excel()。或者也做df['Column_Name] = df['Column_Name].astype(dtype_here),但我处理的专栏很多。是否有一种更容易的方法来检查所有列的值?

检查pd.read_sql()没有像converters这样的东西,但是我正在寻找类似于:

代码语言:javascript
复制
df = pd.read_sql("Select * From Foo", con, dtypes = ({Column_name: str,
                                                      Column_name2:int}))
EN

回答 2

Stack Overflow用户

发布于 2017-10-05 21:13:31

怎么样

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2017-10-05 21:38:14

如果您看到的是" Object“dtype,这意味着熊猫无法将其中的一些行解释为日期,而是将整个列转换为对象(基本上是字符串)。

查看dtype、转换器和parse_dates参数的文档:csv.html

您还可以检查dayfirst参数以正确解析日期。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46594631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档