簡體   English   中英

讀取Excel並使用xlrd存儲數據

[英]Reading excel and storing data with xlrd

我在Excel工作表中有此數據

FT_NAME     FC_NAME C_NAME
FT_NAME1    FC1     C1
FT_NAME2    FC21    C21
            FC22    C22
FT_NAME3    FC31    C31
            FC32    C32
FT_NAME4    FC4     C4

列名在哪里

FT_NAME,FC_NAME,C_NAME

並且我想將此值存儲在數據結構中以備將來使用,目前我正在嘗試將它們存儲在列表列表中,但無法通過以下代碼進行存儲

i=4
    oc=sheet.cell(i,8).value  
    fcl,ocl=[],[]
    while oc:
        ft=sheet.cell(i,6).value
        fc=sheet.cell(i,7).value
        oc=sheet.cell(i,8).value 

        if ft:
            self.foreign_tables.append(ft)
            fcl.append(fc)
            ocl.append(oc)
            self.foreign_col.append(fcl)
            self.own_col.append(ocl)
            fcl,ocl=[],[]

        else:
            fcl.append(fc)
            ocl.append(oc)    

        i+=1

我希望輸出為

ft=[FT_NAME1,FT_NAME2,FT_NAME3,FT_NAME4]
fc=[FC1, [FC21,FC22],[FC31,FC32],FC4]
oc=[C1,[C21,C22],[C31,C32],C4]

誰能幫忙獲得更好的pythonic解決方案?

您可以使用pandas 它將數據讀入一個本質上是大字典的DataFrame中。

import pandas as pd

data =pd.read_excel('file.xlsx', 'Sheet1')
data = data.fillna(method='pad')

print(data)

它給出以下輸出:

    FT_NAME FC_NAME C_NAME
0  FT_NAME1     FC1     C1
1  FT_NAME2    FC21    C21
2  FT_NAME2    FC22    C22
3  FT_NAME3    FC31    C31
4  FT_NAME3    FC32    C32
5  FT_NAME4     FC4     C4

要獲取子列表結構,請嘗試使用以下功能:

def group(data):
    output = []
    names = list(set(data['FT_NAME'].values))
    names.sort()
    output.append(names)
    headernames = list(data.columns)
    headernames.pop(0)

    for ci in list(headernames):
        column_group = []
        column_data = data[ci].values
        for name in names:
            column_group.append(list(column_data[data['FT_NAME'].values == name]))
        output.append(column_group)

    return output

如果您這樣稱呼它:

ft, fc, oc = group(data)
print(ft)
print(fc)
print(oc)

您得到以下輸出:

['FT_NAME1', 'FT_NAME2', 'FT_NAME3', 'FT_NAME4']
[['FC1'], ['FC21', 'FC22'], ['FC31', 'FC32'], ['FC4']]
[['C1'], ['C21', 'C22'], ['C31', 'C32'], ['C4']]

除了單個元素現在也位於列表中之外,這就是您想要的。

這不是最干凈的方法,但是可以完成工作。

希望能幫助到你。

暫無
暫無

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

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