从mysql合并数据类型不匹配问题

从mysql合并数据类型不匹配问题,mysql,pandas,Mysql,Pandas,考虑以下几点: import pandas as pd df1 = pd.io.sql.read_frame("select c1,c2,c3 from table1;",mysqldb1) df2 = pd.io.sql.read_frame("select c1,c4 from table1;",mysqldb2) df = pd.merge(df1,df2,on='c1',how='inner') 这在大多数情况下都有效。我认为我遇到了一个问题,因为在mysqldb1中,c1是一个v

考虑以下几点:

import pandas as pd

df1 = pd.io.sql.read_frame("select c1,c2,c3 from table1;",mysqldb1)
df2 = pd.io.sql.read_frame("select c1,c4 from table1;",mysqldb2)
df =  pd.merge(df1,df2,on='c1',how='inner')
这在大多数情况下都有效。我认为我遇到了一个问题,因为在mysqldb1中,c1是一个varchar,而在mysqldb2中,c1是一个整数。我不能改变这种状况。但是现在,因为

df1.c1.dtype != df2.c1.dtype
merge返回一个空数据帧

我试过选角,也就是说

df2['c1'] = df2.c1.astype(object) 

然后尝试合并,但没有结果。

通常,在SQL读取数据帧的情况下,varchar列被读取为原始字符串,但pandas将所有字符串列都列为“对象”

这种情况下的快速修复方法是将
c1
列转换为字符串

df['c1'] = df.c1.astype(string)
这将把所有int
c1
值转换为字符串

df['c1'] = df.c1.astype(string)

如果您认为所有的
c2
值都应该转换为整数,那么更深层的解决方法是编写一个函数,将行转换为
int
,并显式处理转换困难的
c2
值。但这并不是完全需要的。

您是否尝试过将df1.c1转换为int?或者其中一些不能转换成int?我有。正如您所建议的,其中一些无法转换为intI,因为SQL中的varchar有尾随空格。也许你可以检查一下。我也看到了,但我已经检查过了,这不是问题所在,而不是你应该试着将对象转换为字符串。过去,关于从varchar提取SQL,我在这方面取得了成功