Python筛选DataFrame后如何返回不带表头索引的纯行值
问题修正方法
你写的函数不符合预期有三个直接原因:
- 加了
reset_index(drop=True),这行代码会抹掉原始DataFrame的行索引,生成从0开始的新索引,和你要保留原行号(0、3)的需求冲突 - 列名大小写不匹配:你代码里写的是小写的
name/color/number,但你给出的示例DataFrame列名是大写开头的Name/Color/Number,pandas列名大小写敏感,匹配错误会导致返回Series对象,才会出现Name: df, dtype: object的多余输出 - 默认打印DataFrame会自带列标题,和你不要表头的需求不符
直接用修改后的函数即可:
def selector(name): # 按条件筛选行,保留原始索引,不做重置 filter_res = df.loc[df['Name'] == name, ['Name', 'Color', 'Number']] # 打印时关闭表头,输出纯行内容,格式和你的预期完全一致 print(filter_res.to_string(header=False)) # 如果后续需要对筛选结果做计算,直接返回filter_res即可 return filter_res
调用selector('Mo')后,控制台打印结果为:
0 Mo Red 4 3 Mo Green 3
如果你不需要返回DataFrame结构,只想拿到纯数据内容,可以把返回值改成嵌套列表:
def selector(name): filter_res = df.loc[df['Name'] == name, ['Name', 'Color', 'Number']] # 返回格式为 [[原索引, 名称, 颜色, 数值], ...] 的嵌套列表 return [[idx] + list(row) for idx, row in zip(filter_res.index, filter_res.values)]
内容的提问来源于stack exchange,提问作者brandooo23
相关产品推荐
相关产品推荐

