Skip to main content
 首页 » 编程设计

python之Pandas 读取 Excel : how to access a given cell by column and row numbers

2025年05月04日26zfyouxi

使用 Pandas 模块和 read_excel 函数,我可以为我从 excel 文件中读取的每一列分配一个数字作为列标题,而不是使用 g_int_c=str(df1['Unnamed: 1' ][6]) 来引用 excel 文件中的一段数据,我可以使用 g_int_c=str(df1[1][6])?

示例代码如下:

import pandas as pd 
 
with pd.ExcelFile(inputFile, 
                      sheetname=['pnl1 Data ','pnl2 Data','pnl3 Data','pnl4 Data']) as xlsx: 
        df1 = pd.read_excel(xlsx, 'pnl1 Data ',skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'])#assign column headers 
        df2 = pd.read_excel(xlsx, 'pnl2 Data', skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL']) 
        df3 = pd.read_excel(xlsx, 'pnl3 Data', skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL']) 
        df4 = pd.read_excel(xlsx, 'pnl4 Data', skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL']) 

请您参考如下方法:

要获得漂亮的列名而不是像 'Unnamed: 1' 这样的默认值,请使用 pd.read_excel 的 names 参数。比照,尝试替换

with pd.ExcelFile(inputFile, 
                  sheetname=['pnl1 Data ','pnl2 Data','pnl3 Data','pnl4 Data']) as xlsx: 
    df1 = pd.read_excel(xlsx, 'pnl1 Data ',skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'])#assign column headers 
    df2 = pd.read_excel(xlsx, 'pnl2 Data', skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL']) 
    df3 = pd.read_excel(xlsx, 'pnl3 Data', skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL']) 
    df4 = pd.read_excel(xlsx, 'pnl4 Data', skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL']) 

与

sheets = ['pnl1 Data','pnl2 Data','pnl3 Data','pnl4 Data'] 
df = pd.read_excel(inputFile, sheetname=sheets, skiprows=9, parse_cols="B:H",  
                   names=list('BCDEFG')) 
df = {i: df[sheet] for i, sheet in enumerate(sheets, 1)} 

这将使 df 成为一个字典,其键是工作表编号,其值是 数据框。 DataFrames 的列名称为 B 到 G,大致类似于 原始 Excel 文件。

因此,不是引用编号变量 df1, ..., df4(通常是 a bad idea ),您将拥有字典中的所有数据帧df 并将能够通过数字索引访问它们:df[1], ..., df[4]。例如,工作表 pnl3 Data 将作为 df[3] 访问。

要访问第七行,您可以使用 'pnl1 Data' 工作表的 B 列值:

g_int_c = str(df[1].loc[6, 'B']) 

例如,

import pandas as pd 
try: from cStringIO import StringIO         # for Python2 
except ImportError: from io import StringIO # for Python3 
import textwrap 
df1 = pd.read_csv(StringIO(textwrap.dedent(""" 
          ,,, 
          0,1,2,3 
          1,4,5,6 
          7,8,9,10"""))) 
df2 = pd.read_csv(StringIO(textwrap.dedent(""" 
          ,,, 
          0,NULL,2,3 
          1,4,NULL,NULL""")), converters={i:str for i in range(4)}) 
 
sheets = ['pnl1 Data','pnl2 Data'] 
 
writer = pd.ExcelWriter('/tmp/output.xlsx') 
for df, sheet in zip([df1, df2], sheets): 
    print(df) 
    #   Unnamed: 0 Unnamed: 1 Unnamed: 2 Unnamed: 3 
    # 0          0       NULL          2          3 
    # 1          1          4       NULL       NULL 
    df.to_excel(writer, sheet) 
writer.save() 
 
df = pd.read_excel('/tmp/output.xlsx', sheetname=sheets, names=list('ABCD'), parse_cols="A:E") 
df = {i: df[sheet] for i, sheet in enumerate(sheets, 1)} 
 
for key, dfi in df.items(): 
    print(dfi) 
    #    A  B  C   D 
    # 0  0  1  2   3 
    # 1  1  4  5   6 
    # 2  7  8  9  10 
    #    A    B    C    D 
    # 0  0  NaN  2.0  3.0 
    # 1  1  4.0  NaN  NaN 
 
print(df[1].loc[1, 'B']) 
# 4