我有一个大型电子表格文件(.xlsx),我正在使用python pandas进行处理.碰巧我需要来自该大文件中两个选项卡的数据.其中一个标签有大量数据,另一个标签只有几个方格.
当我在任何工作表上使用pd.read_excel()时,它看起来像是加载了整个文件(而不仅仅是我感兴趣的工作表).因此,当我使用该方法两次(每张一次)时,我实际上必须让整个工作簿被读取两次(即使我们只使用指定的工作表).
我使用它错了还是仅限于这种方式?
谢谢!
如何在Windows命令行上将XLS文件转换为CSV文件.
该计算机已安装Microsoft Office 2000.如果不能使用Microsoft Office,我愿意安装OpenOffice.
我知道一些先前提出的问题,但没有一个解决方案可用于我在下面提供的可重现的例子.
我试图读取.xls从文件中http://www.eia.gov/coal/data.cfm#production -特别是历史详细的煤炭产量数据(1983年至二零一三年) coalpublic2012.xls文件,该文件可以免费获得通过下拉.熊猫无法读懂它.
相比之下,最近一年可用的coalpublic2013.xls文件,2013年, 文件,没有问题:
import pandas as pd
df1 = pd.read_excel("coalpublic2013.xls")
Run Code Online (Sandbox Code Playgroud)
但未来十年的.xls文件(2004-2012)不会加载.我用Excel查看了这些文件,它们打开了,并且没有损坏.
我从熊猫那里得到的错误是:
---------------------------------------------------------------------------
XLRDError Traceback (most recent call last)
<ipython-input-28-0da33766e9d2> in <module>()
----> 1 df = pd.read_excel("coalpublic2012.xlsx")
/Users/jonathan/anaconda/lib/python2.7/site-packages/pandas/io/excel.pyc in read_excel(io, sheetname, header, skiprows, skip_footer, index_col, parse_cols, parse_dates, date_parser, na_values, thousands, convert_float, has_index_names, converters, engine, **kwds)
161
162 if not isinstance(io, ExcelFile):
--> 163 io = ExcelFile(io, engine=engine)
164
165 return io._parse_excel(
/Users/jonathan/anaconda/lib/python2.7/site-packages/pandas/io/excel.pyc in __init__(self, io, **kwds)
204 self.book …Run Code Online (Sandbox Code Playgroud) 我使用 将一个大型 Excel 文件读入熊猫.read_excel,并且该文件具有日期列。当读入 Pandas 时,日期默认为时间戳。由于文件很大,我想将日期作为字符串读取。
如果这是不可能的,那么我至少想以与原始文件中相同的格式(例如“8/18/2009”)将日期导出回 Excel。
我的两个问题是:
我正在尝试创建一个进度条,以便使用tqdm将excel数据读入熊猫。我可以使用chunksize参数轻松地通过csv做到这一点:
data_reader = pd.read_csv(path,
chunksize = 1000)
for row in tqdm(data_reader,
total = 200):
df_list = []
df_list.append(row)
Run Code Online (Sandbox Code Playgroud)
它将为200个总块中的每1000个块更新进度条。pd.read_excel但是,不再有chunksize争论。还有其他选择吗?
编辑:我已经读过以下问题:重新读取大块的excel文件(使用python读取大xlsx文件的一部分),但是read_excel 不再具有chunksize参数,并且pd.ExcelFile.parse等效。我想知道是否有chunksize参数的替代方法或创建一种可迭代的方法来循环读取大块。
从xlsx文件读取数据(仅20000个数字)需要花费很多时间:
import pandas as pd
xlsxfile = pd.ExcelFile("myfile.xlsx")
data = xlsxfile.parse('Sheet1', index_col = None, header = None)
Run Code Online (Sandbox Code Playgroud)
大约需要9秒钟。
如果我将同一文件保存为csv格式,则需要25毫秒左右的时间:
import pandas as pd
csvfile = "myfile.csv"
data = pd.read_csv(csvfile, index_col = None, header = None)
Run Code Online (Sandbox Code Playgroud)
这是openpyxl的问题还是我错过了什么?还有其他选择吗?
我需要使用pd.read_excel来处理一个excel文件中的每个工作表。
但是在大多数情况下,我不知道工作表名称。
所以我用它来判断excel中有多少张纸:
i_sheet_count=0
i=0
try:
df.read_excel('/tmp/1.xlsx',sheetname=i)
i_sheet_count+=1
i+=1
else:
i+=1
print(i_sheet_count)
Run Code Online (Sandbox Code Playgroud)
在此过程中,我发现该过程相当缓慢,
因此,read_excel只能读取有限的行以提高速度吗?
我试图NROWS但没有work..still慢..