You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame字符串值转为布尔值?列数不匹配错误求解

问题解决:将YES/NO/NaN列转换为布尔值并重构DataFrame

错误原因

你当前的death_data是包含5个一维ndarray的列表,每个ndarray对应原DataFrame中一列的布尔值结果(长度为159,即原数据的行数)。当你直接执行pd.DataFrame(death_data, columns=death_columns)时,pandas会将列表里的每个ndarray当作一行数据,最终生成一个5行、159列的DataFrame,但你指定了仅5列,因此出现列数不匹配的报错。

解决方案

方案1:转置数据后创建DataFrame

将death_data转置,把原本的列数据转换为行数据,与指定列名匹配:

import pandas as pd
import numpy as np

death_columns = ['Death1', 'Death2', 'Death3', 'Death4', 'Death5']
death_counts = combined_dataframe[death_columns]
death_data = [np.where(death_counts[c] == "YES", True, False) for c in death_columns]
# 转置数组,让列数据变为行数据
death_counts = pd.DataFrame(np.array(death_data).T, columns=death_columns)

方案2:用pandas内置方法简化操作

无需借助numpy的where,直接利用pandas的Series比较操作,代码更简洁高效:

# 直接将"YES"转为True,"NO"和NaN转为False
death_counts = combined_dataframe[death_columns].eq("YES")

如果需要单独处理NaN(比如将NaN转为特定布尔值),可先填充缺失值:

# 先把NaN替换为"NO",再转为布尔值
death_counts = combined_dataframe[death_columns].fillna("NO").eq("YES")

内容的提问来源于stack exchange,提问作者Mark Molina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:12:40