熊猫 数字列被视为对象,不会强制



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

  • User_ID应该是一个"对象"......这很好。
  • DATE 采用 201612、201701、201702 等格式。 (year_number+month_number)
  • 收入是所有数值,例如 57.25、50、100.10 等
  • 扣除也是数字
  • 商店计数自然是一个整数...

我不明白为什么我的数据集将这些计数和总和字段作为对象返回,因为我无法使用 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,错误='强制'),但这种强制选项迫使它们成为"NaN"。

有人可以假设这里可能发生了什么或如何解决这个问题,因为我认为我正在做一些应该明显不正确的事情?

可能存在问题值具有开始或结束空格,可以通过strip删除:

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

您可以通过转换为list来检查它:

print (df['number_stores'].tolist()[:20])

最新更新