簡體   English   中英

熊貓閱讀Excel:如何通過列和行號訪問給定單元格

[英]Pandas Read Excel: how to access a given cell by column and row numbers

使用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_excelnames參數。 必要的修改,請嘗試更換

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成為dict,其鍵為工作表編號,其值為DataFrames。 DataFrame的列名稱將為BG ,與原始Excel文件類似。

因此,您不必引用編號為df1 ,..., df4變量(通常是一個壞主意 ),而可以將所有DataFrame保存在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)
    #    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

從您的問題看來,這不是關於在導入時為列分配數字值,而是關於如何通過列號和行號訪問表的給定單元格,這是一個有關如何索引或切片一個表的問題。整數的數據幀。

在您的示例中,您提到要引用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

輸出:

   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

這個問答可能會有所幫助: 如何在Pandas中按數字獲取列?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM