从pandas列提取分箱边界列表用于pd.cut出现类型报错如何解决
问题原因
- 提取
bins_list的操作返回的是长度为1的pandas Series对象,而非其中存储的字符串内容,没有取到实际的分箱边界值。 - Excel中读取的
bins_edges_list列是字符串格式的列表表达式,不是Python原生的数值列表类型,就算提取到字符串内容,也无法直接传入pd.cut作为分箱边界使用。另外你执行的bins_list.replace("'","")仅会返回修改后的副本,不会改动原bins_list对象,且仅去除引号也无法完成字符串到列表的转换。
解决方法
首先导入Python内置的安全表达式解析模块:
import ast
单次提取转换方案
# 提取var1对应的分箱边界字符串 bins_str = df_bin_edges.loc[df_bin_edges['Variable'] == 'var1', 'bins_edges_list'].iloc[0] # 将字符串格式的列表转换为Python原生数值列表 bins_list = ast.literal_eval(bins_str)
转换完成后即可正常传入pd.cut使用:
pd.cut(df[col], bins=bins_list,labels=None, retbins=False, duplicates='drop', precision=0).astype(str)
批量预处理方案
如果需要频繁提取不同变量的分箱边界,可以提前把整列都转换为原生列表格式:
df_bin_edges['bins_edges_list'] = df_bin_edges['bins_edges_list'].apply(ast.literal_eval) # 后续提取直接取值即可 bins_list = df_bin_edges.loc[df_bin_edges['Variable'] == 'var1', 'bins_edges_list'].iloc[0]
内容的提问来源于stack exchange,提问作者Zenvega
相关产品推荐
相关产品推荐

