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

如何从Pandas DataFrame中获取指定字符串的行和列位置

用Pandas原生方法定位唯一字符串的行/列位置

嘿,这个需求完全可以用Pandas自带的功能优雅解决,而且比你可能用的手动查找/循环高效太多,毕竟咱们要充分利用向量化操作的优势嘛!

下面给你两种最实用的方案,都是纯Pandas/Numpy原生实现:

方案一:用np.where直接获取整数索引

这是最简洁的方式,一步就能拿到目标值的行和列的整数位置,刚好对应你导出Excel时需要的坐标:

import pandas as pd
import numpy as np

# 示例DataFrame
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'City': ['London', 'Paris', 'New York'],
    'ID': ['A001', 'B002', 'TARGET_STR']
})

target = 'TARGET_STR'

# 获取所有匹配位置的数组(因为唯一,所以只有一组结果)
row_indices, col_indices = np.where(df == target)
# 提取唯一的行/列位置
row_pos = row_indices[0]
col_pos = col_indices[0]

print(f"整数行位置:{row_pos},整数列位置:{col_pos}")

如果需要转换成Excel风格的单元格地址(比如C3),可以简单转换一下:

# 列索引转Excel列名(0→A,1→B...)
excel_col = chr(ord('A') + col_pos)
# Excel行号从1开始,所以加1
excel_cell = f"{excel_col}{row_pos + 1}"
print(f"对应Excel单元格:{excel_cell}")

方案二:用df.stack()获取行/列标签(适合自定义索引的情况)

如果你的DataFrame用了自定义的行/列标签,这个方法能直接拿到标签,再转换成整数位置也很方便:

# 把DataFrame堆叠成Series,索引变成(行标签, 列标签)的元组
stacked_df = df.stack()
# 找到目标值的索引(因为唯一,取第一个)
target_index = stacked_df[stacked_df == target].index[0]
row_label, col_label = target_index

# 如果需要整数位置,用get_loc转换
row_pos = df.index.get_loc(row_label)
col_pos = df.columns.get_loc(col_label)

print(f"行标签:{row_label},列标签:{col_label}")
print(f"整数行位置:{row_pos},整数列位置:{col_pos}")

为什么这两种方法更优?

  • 高效:都是向量化操作,比循环遍历快N倍,大DataFrame优势尤其明显
  • 简洁:不需要自己写判断逻辑,一行代码就能定位
  • 灵活:不管是要整数位置还是行/列标签,都能轻松拿到,适配后续导出Excel的各种需求

要是你导出Excel后还想给这个单元格做个标记(比如加粗、变色),可以结合openpyxl或者xlsxwriter直接操作,比如:

from openpyxl.styles import Font

with pd.ExcelWriter('result.xlsx', engine='openpyxl') as writer:
    df.to_excel(writer, sheet_name='Data', index=False)
    ws = writer.sheets['Data']
    # 用之前得到的Excel单元格地址设置格式
    ws[excel_cell].font = Font(bold=True, color='FF0000')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:28:23