1

我很难理解我的 sql 到 pandas 数据框数据类型的情况:

  • User_ID 应该是一个“对象”。这很好。
  • DATE的格式为201612、201701、201702等(年数+月数)
  • INCOME 是所有数值,例如 57.25、50、100.10 等
  • DEDUCTIONS 也是数字
  • COUNT of STORE 自然是一个整数......

我不明白为什么我的数据集以这些计数和总和字段作为对象返回,因为我不能使用诸如 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”。

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

4

1 回答 1

1

问题值可能有开始或结束空格,可以通过以下方式删除strip

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

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

print (df['number_stores'].tolist()[:20])
于 2017-05-23T05:27:40.103 回答