pandas阅读Excel:如何按列和行号访问给定的单元格

使用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']) 

从你的问题看,这不是关于在导入时将数值赋给列,而是关于如何按列和行数访问表的给定单元格,这是一个关于如何索引或切片的问题数据框由整数。

在你的例子中,你提到想引用df1[1][6] 。 你可以使用.iloc来做到这.iloc

 # spin up a df df = pd.DataFrame(np.random.randint(0,10,size=(7, 7)), columns=list('ABCDEFG')) print df 

输出:

  ABCDEFG 0 0 7 7 8 8 2 2 1 8 2 9 1 6 8 1 2 5 3 5 5 9 2 7 3 7 4 2 1 1 5 0 4 0 4 4 1 9 7 1 5 4 2 7 7 9 7 2 6 0 6 7 8 1 4 1 

现在使用.iloc按整数进行索引:

 df.iloc[1,6] 

输出:

 1 

要返回上面的代码,最有可能将其更改为以下内容:

 g_int_c=str(df.iloc[1,6]) 

一般的参考资料,这里是关于索引和切片数据框的文档: http : //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-integer

这个问答可能会有所帮助: 如何在pandas中按数字逐列?

要获得漂亮的列名称而不是像'Unnamed: 1'这样的默认值,请使用pd.read_excelnames参数。 mutatis mutandis,尝试更换

 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。 数据框将具有从BG列名,大致类似于原始的Excel文件。

因此,而不是引用数字variablesdf1 ,…, df4 (通常是一个坏主意 ),你将在dict 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) # ABCD # 0 0 1 2 3 # 1 1 4 5 6 # 2 7 8 9 10 # ABCD # 0 0 NaN 2.0 3.0 # 1 1 4.0 NaN NaN print(df[1].loc[1, 'B']) # 4 

header=None,names=[0,1,2,3,4,5,6]工作。

 with pd.ExcelFile(inputFile, sheetname=['pnl1 Data ','pnl2 Data','pnl3 Data','pnl4 Data']) as xlsx: df1 = pd.read_excel(xlsx, 'pnl1 Data ',skiprows=10, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'],header=None,names=[0,1,2,3,4,5,6])#assign column headers df2 = pd.read_excel(xlsx, 'pnl2 Data', skiprows=10, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'],header=None,names=[0,1,2,3,4,5,6]) df3 = pd.read_excel(xlsx, 'pnl3 Data', skiprows=10, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'],header=None,names=[0,1,2,3,4,5,6]) df4 = pd.read_excel(xlsx, 'pnl4 Data', skiprows=10, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'],header=None,names=[0,1,2,3,4,5,6])