pandas 数字列被视为对象且不会强制转换
pandas Numerical columns being treated as object and won't coerce
我很难理解我的 sql 到 pandas 数据框数据类型发生了什么:
- User_ID 应该是 'object'.. 这很好。
- DATE格式为201612、201701、201702等(year_number+month_number)
- INCOME为57.25、50、100.10等所有数值
- DEDUCTIONS 也是数字
- COUNT of STORES 自然是一个整数...
我不明白为什么我的数据集会返回这些计数和求和字段作为对象,因为我不能使用 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])
我很难理解我的 sql 到 pandas 数据框数据类型发生了什么:
- User_ID 应该是 'object'.. 这很好。
- DATE格式为201612、201701、201702等(year_number+month_number)
- INCOME为57.25、50、100.10等所有数值
- DEDUCTIONS 也是数字
- COUNT of STORES 自然是一个整数...
我不明白为什么我的数据集会返回这些计数和求和字段作为对象,因为我不能使用 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])