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

如何用Pandas打印Excel单元格值及获取DataFrame不匹配单元格位置

问题1:如何使用Pandas打印Excel中的单元格值
  • 先安装依赖:读取.xlsx文件需要openpyxl,读取.xls需安装xlrd(注意xlrd 2.0及以上版本不再支持.xls,若需读取这类文件请安装xlrd<2.0)
  • 读取Excel文件到DataFrame:
import pandas as pd
# 读取指定工作表,默认读取第一个工作表
df = pd.read_excel("your_excel_file.xlsx", sheet_name="Sheet1")
  • 打印指定单元格值的常用方式:
    • 通过行索引+列名定位(可读性高,推荐):
      # 打印索引为1的行、列名为"name"的单元格值
      print(df.at[1, "name"])
      
    • 通过行/列的位置序号定位(从0开始计数):
      # 打印第2行(位置序号1)、第1列(位置序号0)的单元格值
      print(df.iat[1, 0])
      
    • 也可使用loc(标签索引)或iloc(位置索引):
      print(df.loc[1, "name"])  # 效果同at
      print(df.iloc[1, 0])      # 效果同iat
      
问题2:获取两个DataFrame不匹配值的单元格位置

你的现有代码仅能筛选出存在不匹配的行,要定位具体不匹配的单元格,可参考以下两种实现方式:

方式1:生成不匹配单元格明细列表

import pandas as pd

# 读取两个CSV文件(沿用你的代码逻辑)
file = ["random1.csv", "random2.csv"]
li = []
for filename in file:
    df = pd.read_csv(filename, index_col=None, header=0)
    li.append(df)
df1, df2 = li[0], li[1]

# 生成布尔矩阵:True表示对应位置的值不匹配
mismatch_mask = df1.ne(df2)

# 遍历提取所有不匹配的单元格信息
mismatch_details = []
for row_idx in mismatch_mask.index:
    for col_name in mismatch_mask.columns:
        if mismatch_mask.loc[row_idx, col_name]:
            mismatch_details.append({
                "行索引": row_idx,
                "列名": col_name,
                f"{file[0]}值": df1.loc[row_idx, col_name],
                f"{file[1]}值": df2.loc[row_idx, col_name]
            })

# 打印结果
print("不匹配单元格明细:")
for detail in mismatch_details:
    print(f"行{detail['行索引']} 列{detail['列名']}: {file[0]}={detail[f'{file[0]}值']}, {file[1]}={detail[f'{file[1]}值']}")

方式2:用stack()快速整理结果(更简洁)

利用pandas的stack功能快速汇总不匹配位置:

# 生成不匹配的Series,索引为(行索引, 列名)
mismatch_series = mismatch_mask.stack()[mismatch_mask.stack()]

# 输出每个不匹配位置的信息
print("\n不匹配位置汇总:")
for (row_idx, col_name), _ in mismatch_series.items():
    print(f"位置:行{row_idx},列{col_name}")
    print(f"{file[0]}值:{df1.loc[row_idx, col_name]},{file[1]}值:{df2.loc[row_idx, col_name]}\n")

针对你的示例数据,运行后会输出类似内容:

不匹配单元格明细:
行1 列address: random1.csv=1, random2.csv=2
行4 列address: random1.csv=2, random2.csv=3
行9 列address: random1.csv=11, random2.csv=10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:55:30