7

感谢 panda,我们可以使用“read_excel”函数将整张工作表读入数据框中。

我想使用 xlwings 使用相同的方法。事实上,我的 Workbook 已经打开了,我不想使用 read_excel 函数(顺便说一下,witch 会花很长时间才能执行),而是使用 xlwings 的强大功能将整个工作表保存到数据框中。

事实上,使用 xlwings 我们可以将范围保存到数据框中。这意味着我必须知道范围大小。但我想有一种更好(更快!)的方法来做到这一点,不是吗?

你有什么想法吗?非常感谢 !

编辑:一张表的一个例子我想像 read_excel 那样转移到一个数据框中。

Name Point  Time    Power   Test1   Test2   Test3   Test4 ##
Test    0   1   10  4   24  144
        2   20  8   48  288
        3   30  12  72  432
        4   40  16  96  576
        5   50  20  120 720
        6   60  24  144 864
        7   70  28  168 1008
        8   80  32  192 1152
        9   90  36  216 1296
        10  100 40  240 1440
        11  110 44  264 1584
        12  120 48  288 1728
4

5 回答 5

17

您可以使用内置转换器将其放在一行中:

df = sht.range('A1').options(pd.DataFrame, 
                             header=1,
                             index=False, 
                             expand='table').value
于 2018-03-14T19:37:30.677 回答
6

xlwings 确实提供了加载整张工作表的 api。为此,请使用used_rangeapi 读取工作表的整个使用部分。(当然我们不想获得未使用的行值,对吗?;-))无论如何,这里有一个关于如何做到这一点的代码片段:

import pandas as pd
import xlwings as xw

workbook = xw.Book('some.xlsx')
sheet1 = workbook.sheets['sheet1'].used_range.value
df = pd.DataFrame(sheet1)

就这样。

于 2020-02-24T11:43:43.667 回答
4

您可以使用 pandas 读取多张纸:

excel_file = pd.ExcelFile('myfile.xls')
df1 = excel_file.parse('Sheet1')
df2 = excel_file.parse('Sheet2') 

因此,只需一个接一个地打开文件,从所需的工作表中读取并处理数据框。

于 2015-12-22T10:33:48.073 回答
4

事实上,我可以这样做:

import xlwings as xw
import pandas as pd

def GetDataFrame(Sheet,N,M):
    wb = xw.Workbook.active()
    Data=xw.Range(Sheet,(1,1),(N,M)).value
    Data=pd.DataFrame(Data)
    Data=Data.dropna(how='all',axis=1)
    Data=Data.dropna(how='all',axis=0)
    return Data
于 2015-12-23T08:04:14.610 回答
1

我花了更多时间使用 pandas.read_excel 阅读 20M Excel。但是 xlwings 读取 Excel 的速度非常快。我会考虑使用 xlwings 阅读并转换为 Dataframe。我想我和标题所有者有相同的需求。Xlwings 在这四年里进行了一些调整。所以我对第一个回答者的代码做了一些修改。`

import xlwings as xw
import pandas as pd

def GetDataFrame(wb_file,Sheets_i,N,M):
    wb = xw.books(wb_file)   #open your workbook
         #Specify the value of the cell of the worksheet
    Data=wb.sheets[Sheets_i].range((1,1),(N,M)).value  
    Data=pd.DataFrame(Data)
    Data=Data.dropna(how='all',axis=1)
    Data=Data.dropna(how='all',axis=0)
    return Data

`

于 2019-10-08T03:17:08.617 回答