Pandas仅对DataFrame指定列执行pct_change生成新列的问题求助
报错原因
你触发类型错误的核心是pct_change()的axis参数设置错误:
axis=1代表沿列方向做计算,即对同一行的不同列之间做百分比变化推导,调用时会遍历全表所有列参与运算。哪怕你最终只取engagement_sentiment_score列的结果,只要DataFrame中存在字符串类型的其他列,运算过程中就会触发字符串相除的类型错误,和engagement_sentiment_score本身是不是float类型无关。- 日度百分比变化是同一列相邻行的对比,默认参数
axis=0(沿行方向计算)才符合你的需求,不需要主动设置axis=1。
解决方案
方案1(推荐):仅针对目标列计算
直接对engagement_sentiment_score单列调用pct_change(),完全规避其他列的类型影响,运算效率更高:
Bit['Daily % Sentiment Change'] = Bit['engagement_sentiment_score'].pct_change()
方案2:全表计算前先筛选数值列
如果你需要同时计算多列的日度变化,可以先筛选出全表的数值类型列再调用方法:
# 提取所有数值列 num_cols = Bit.select_dtypes(include=['int', 'float']).columns # 仅对数值列计算百分比变化 Bit['Daily % Sentiment Change'] = Bit[num_cols].pct_change()['engagement_sentiment_score']
校验建议
修改后如果仍有异常,可以执行print(Bit.dtypes)输出所有列的类型,确认是否存在数值列被隐式转换为object类型的情况。
内容的提问来源于stack exchange,提问作者J. Smith
相关产品推荐
相关产品推荐

