2016-05-15 96 views
0

使用Pandas模块和read_excel函数,我可以给每一列从excel文件中读取一个数字赋值作为列标题,使用g_int_c=str(df1['Unnamed: 1'][6])来引用excel文件中的一段数据,我可以使用g_int_c=str(df1[1][6])Pandas Read Excel:如何按列和行号访问给定的单元格

示例代码如下:

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']) 
+0

尝试:[?如何标头添加到R中的数据集(http://stackoverflow.com/questions/14021675/how-to-add-header-to-a-dataset-in-r ) –

回答

1

从你的问题的外观上来看,这是不是在进口数量分配值的列,而是如何通过列访问表的给定小区和行号,这是一个关于如何通过整数索引或切片数据框的具体问题。

在你的例子中,你提到想参考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]) 

对于一般的引用,这里的一对索引和切片dataframes文档:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-integer

而且这种问答& A可能会有所帮助:How to get column by number in Pandas?

+0

因为这被选为接受的答案,请更新问题标题。 – pashute

2

要获得很好的列名,而不是默认值如'Unnamed: 1'使用pd.read_excelnames参数。比照,试图用

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)} 

该更换

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

将使df的字典,它的键是张数,值是 DataFrames。该数据框将具有列表名称BG,大致像原始Excel文件的 。

因此,而是引用编号变量df1,...,df4(通常,a bad idea),你必须在字典df所有DataFrames,将能够通过数字索引来访问它们: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 
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]) 
相关问题