如何提取DataFrame中特定列值对应的行数据(列数可变场景)
解决方法
1. 先搞定筛选空表的问题
你得到空DataFrame,大概率是字符串匹配不严谨:
- 先确认列名是否正确:打印所有列名,看
Type of Load有没有前后多余空格(比如你写的'Type of Load '末尾带空格,但实际列名可能是'Type of Load'):print(Stress_Transfer.columns.tolist()) - 再确认目标值的准确写法:查看
Type of Load列的所有唯一值,看是不是你要的'Bending Moment'(比如你之前写的'BendingMoment'少了空格,肯定匹配不到):print(Stress_Transfer['Type of Load'].unique())
2. 通用提取所有value列的方法
不管后续新增多少value5、value6这类列,用下面的代码都能自动适配:
# 第一步:修正筛选条件,准确定位目标行(根据上面排查的结果调整列名和匹配值) target_row = Stress_Transfer.loc[Stress_Transfer['Type of Load'] == 'Bending Moment'] # 第二步:自动识别所有以value开头的列(兼容大小写,比如Value2、VALUE3都能匹配) value_cols = [col for col in Stress_Transfer.columns if col.lower().startswith('value')] # 第三步:把目标行的value列值转成列表(如果有多行匹配,会返回嵌套列表;单行的话直接转成一维列表) value_list = target_row[value_cols].values.tolist() # 如果确定只有一行,也可以用squeeze简化:value_list = target_row[value_cols].squeeze().tolist()
3. 加个容错避免报错
要是担心找不到匹配行导致代码报错,可以加个判断:
if not target_row.empty: value_cols = [col for col in Stress_Transfer.columns if col.lower().startswith('value')] value_list = target_row[value_cols].values.tolist() else: print("没找到对应'Bending Moment'的记录") value_list = []
内容的提问来源于stack exchange,提问作者Vikram Suriyanarayanan
相关产品推荐
相关产品推荐

