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

时间:2016-05-15 09:45:18

标签: python excel pandas

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

3 个答案:

答案 0 :(得分:3)

要获取精美的列名而不是'Unnamed: 1'之类的默认值,请使用names的{​​{1}}参数。经过必要的修改,试着替换

pd.read_excel

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)} 成为一个字典,其键是表格编号,其值是 DataFrames。列表名称dfB的列号名称大致相同 原始的Excel文件。

因此,您不会引用带编号的变量G,...,df1(通常为a bad idea),而是拥有dict {{1}中的所有DataFrame。并且可以通过数字索引访问它们:df4,...,df。例如,工作表df[1]将作为df[4]进行访问。

要访问第七行,您的工作表pnl3 Data的{​​{1}}列值可以使用:

df[3]

例如,

B

答案 1 :(得分:2)

从你问题的外观来看,这不是关于在导入时为列分配数值,而是关于如何按列和行号访问表的给定单元格,这是一个特别关于如何索引的问题或按整数切片数据。

在您的示例中,您提到想要引用df1[1][6]。您可以使用.iloc

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

输出:

   A  B  C  D  E  F  G
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

此Q& A可能会有所帮助:How to get column by number in Pandas?

答案 2 :(得分:0)

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])
相关问题