2016-05-15 49 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]) 
相關問題