Stratascratch项目代码报错:TypeError问题排查与修复求助
问题分析与修复方案
报错根源
- 数值列类型错误:
sale_amount、prev_day_sale_amount、difference_btw_prev_day列是字符串类型,无法进行数值比较运算,导致出现'>=' not supported between instances of 'str' and 'int'错误。 - idxmax参数误用:
axis="columns"表示按行查找最大值索引,而我们需要的是difference_btw_prev_day列的最大值对应的行日期索引,应该使用默认的axis=0(可省略)。
修复步骤
1. 转换数值列类型为数值型
将相关字符串列转换为整数或浮点数,确保能进行数值运算:
import pandas as pd # 转换为数值类型,无法转换的内容设为NaN(可选) daily_sales_df['sale_amount'] = pd.to_numeric(daily_sales_df['sale_amount'], errors='coerce').astype(int) daily_sales_df['prev_day_sale_amount'] = pd.to_numeric(daily_sales_df['prev_day_sale_amount'], errors='coerce') daily_sales_df['difference_btw_prev_day'] = pd.to_numeric(daily_sales_df['difference_btw_prev_day'], errors='coerce')
如果确认列中没有非数字字符,也可以直接用astype:
daily_sales_df['sale_amount'] = daily_sales_df['sale_amount'].astype(int) daily_sales_df['prev_day_sale_amount'] = daily_sales_df['prev_day_sale_amount'].astype(float) daily_sales_df['difference_btw_prev_day'] = daily_sales_df['difference_btw_prev_day'].astype(float)
2. 修正idxmax调用逻辑
去掉错误的axis参数,获取最大差值对应的日期及行数据:
# 获取最大差值对应的日期 max_change_date = daily_sales_df['difference_btw_prev_day'].idxmax() print(max_change_date) # 输出:2013-04-29 00:00:00 # 获取对应的行数据 target_row = daily_sales_df.loc[max_change_date] print(target_row)
输出结果会符合预期:
sale_day 2013-04-29 sale_amount 732 prev_day_sale_amount 458.0 difference_btw_prev_day 274.0 Name: 2013-04-29 00:00:00, dtype: object
内容的提问来源于stack exchange,提问作者JMas19
相关产品推荐
相关产品推荐

