HaP*_*ran 119 python excel dataframe pandas
我有一个大型电子表格文件(.xlsx),我正在使用python pandas进行处理.碰巧我需要来自该大文件中两个选项卡的数据.其中一个标签有大量数据,另一个标签只有几个方格.
当我在任何工作表上使用pd.read_excel()时,它看起来像是加载了整个文件(而不仅仅是我感兴趣的工作表).因此,当我使用该方法两次(每张一次)时,我实际上必须让整个工作簿被读取两次(即使我们只使用指定的工作表).
我使用它错了还是仅限于这种方式?
谢谢!
Noa*_*oah 169
试试pd.ExcelFile
:
xls = pd.ExcelFile('path_to_file.xls')
df1 = pd.read_excel(xls, 'Sheet1')
df2 = pd.read_excel(xls, 'Sheet2')
Run Code Online (Sandbox Code Playgroud)
正如@HaPsantran所说,整个Excel文件在ExcelFile()
调用期间被读入(似乎没有办法解决这个问题).这样,您只需每次要访问新工作表时都不必阅读相同的文件.
请注意,sheet_name
参数to pd.read_excel()
可以是工作表的名称(如上所示),指定工作表编号的整数(例如0,1等),工作表名称或索引列表,或None
.如果提供了列表,则返回一个字典,其中键是表名/索引,值是数据帧.默认是简单地返回第一张表(即sheet_name=0
).
如果None
指定,则返回所有工作表,作为{sheet_name:dataframe}
字典.
Vik*_*ngh 72
有3种选择:
代码示例:
import pandas as pd
df = pd.read_excel('excel_file_path.xls')
# this will read the first sheet into df
xls = pd.ExcelFile('excel_file_path.xls')
# Now you can list all sheets in the file
xls.sheet_names
# ['house', 'house_extra', ...]
# to read just one sheet to dataframe:
df = pd.read_excel(file_name, sheetname="house")
# to read all sheets to a map
sheet_to_df_map = {}
for sheet_name in xls.sheet_names:
sheet_to_df_map[sheet_name] = xls.parse(sheet_name)
Run Code Online (Sandbox Code Playgroud)
更新:
# @ihightower pointed out in the comments that all sheets can be
# directly read into an ordered dictionary in 1 step
# for pandas version >= 0.21.0
sheet_to_df_map = pd.read_excel(file_name, sheet_name=None)
# for pandas version < 0.21.0
sheet_to_df_map = pd.read_excel(file_name, sheetname=None)
Run Code Online (Sandbox Code Playgroud)
更新2:感谢@toto_tico指出它.
sheetname:string,int,字符串/整数的混合列表,或者None,默认值0自版本0.21.0后不推荐使用:使用sheet_name而不是Source Link
Ell*_*ott 27
您还可以使用工作表的索引:
xls = pd.ExcelFile('path_to_file.xls')
sheet1 = xls.parse(0)
Run Code Online (Sandbox Code Playgroud)
将给出第一个工作表.对于第二个工作表:
sheet2 = xls.parse(1)
Run Code Online (Sandbox Code Playgroud)
小智 23
您还可以将工作表名称指定为参数:
data_file = pd.read_excel('path_to_file.xls', sheetname="sheet_name")
Run Code Online (Sandbox Code Playgroud)
将仅上传工作表"sheet_name"
Gon*_*ica 11
选项1
如果不知道床单名称
# Read all sheets in your File
df = pd.read_excel('FILENAME.xlsm', sheet_name=None)
# Prints all the sheets name in an ordered dictionary
print(df.keys())
Run Code Online (Sandbox Code Playgroud)
然后,根据想要阅读的工作表,可以将它们中的每一个传递给特定的dataframe
,例如
sheet1_df = pd.read_excel('FILENAME.xlsm', sheet_name=SHEET1NAME)
sheet2_df = pd.read_excel('FILENAME.xlsm', sheet_name=SHEET2NAME)
Run Code Online (Sandbox Code Playgroud)
选项 2
如果名称不相关并且所有关心的是工作表的位置。假设一个人只想要第一张纸,
# Read all sheets in your File
df = pd.read_excel('FILENAME.xlsm', sheet_name=None)
sheet1 = list(df.keys())[0]
Run Code Online (Sandbox Code Playgroud)
然后,根据工作表名称,可以将每个文件传递给特定的dataframe
,例如
sheet1_df = pd.read_excel('FILENAME.xlsm', sheet_name=SHEET1NAME)
Run Code Online (Sandbox Code Playgroud)
小智 10
如果您有兴趣阅读所有工作表并将它们合并在一起。最好和最快的方法
sheet_to_df_map = pd.read_excel('path_to_file.xls', sheet_name=None)
mdf = pd.concat(sheet_to_df_map, axis=0, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
这会将所有工作表转换为单个数据框 m_df
pd.read_excel('filename.xlsx')
Run Code Online (Sandbox Code Playgroud)
默认情况下,请阅读工作簿的第一页。
pd.read_excel('filename.xlsx', sheet_name = 'sheetname')
Run Code Online (Sandbox Code Playgroud)
阅读工作簿的特定表并
pd.read_excel('filename.xlsx', sheet_name = None)
Run Code Online (Sandbox Code Playgroud)
从Excel到pandas数据框读取所有工作表,因为OrderedDict的类型表示嵌套数据框,所有工作表都作为在数据框内收集的数据框,其类型为OrderedDict。
如果:
然后,您可以传递工作表名称列表。您可以手动填充:
import pandas as pd
path = "C:\\Path\\To\\Your\\Data\\"
file = "data.xlsx"
sheet_lst_wanted = ["01_SomeName","05_SomeName","12_SomeName"] # tab names from Excel
### import and compile data ###
# read all sheets from list into an ordered dictionary
dict_temp = pd.read_excel(path+file, sheet_name= sheet_lst_wanted)
# concatenate the ordered dict items into a dataframe
df = pd.concat(dict_temp, axis=0, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
或者
如果您所需的工作表具有通用的命名约定,并且还允许您与不需要的工作表区分开来,则可以实现一些自动化:
# substitute following block for the sheet_lst_wanted line in above block
import xlrd
# string common to only worksheets you want
str_like = "SomeName"
### create list of sheet names in Excel file ###
xls = xlrd.open_workbook(path+file, on_demand=True)
sheet_lst = xls.sheet_names()
### create list of sheets meeting criteria ###
sheet_lst_wanted = []
for s in sheet_lst:
# note: following conditional statement based on my sheets ending with the string defined in sheet_like
if s[-len(str_like):] == str_like:
sheet_lst_wanted.append(s)
else:
pass
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用以下行阅读所有工作表
import pandas as pd
file_instance = pd.ExcelFile('your_file.xlsx')
main_df = pd.concat([pd.read_excel('your_file.xlsx', sheet_name=name) for name in file_instance.sheet_names] , axis=0)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
194333 次 |
最近记录: |