pandas 数字列被视为对象且不会强制转换

pandas Numerical columns being treated as object and won't coerce

我很难理解我的 sql 到 pandas 数据框数据类型发生了什么:

我不明白为什么我的数据集会返回这些计数和求和字段作为对象,因为我不能使用 df.total_deductions.max() 等操作。我不明白是什么原因造成的,也不知道如何解决。

query = """ SELECT  
  date, 
   user_id,  
  sum(income) total_spend, 
 sum(deductions) total_deductions ,
  count(distinct stores) number_stores 
   FROM  db_table GROUP BY user_id """

df = pd.read_sql(query, jdbc_connection)

df.dtypes: 
date:  object 
user_id:  object 
total_spend:   float 
total_deductions:  object 
number_stores: object

我看了资料。我似乎无法表明会导致这些计数或总和成为对象而不是数值。
我尝试使用 pd.to_numeric( each_of_my_columns, error ='coerce') 但此强制选项强制它们为 "NaN".

有人可以假设这里会发生什么或如何解决这个问题,因为我假设我正在做一些应该是错误的事情?

问题值可能有开始或结束空格,可以通过 strip:

删除
df['number_stores']=pd.to_numeric(df['number_stores'].astype(str).str.strip(),error='coerce')

您可以通过转换为 list:

来检查它
print (df['number_stores'].tolist()[:20])