Python库pandas可以读取Excel电子表格,并使用pandas.DataFrame
命令将它们转换为pandas.read_excel(file)
。在引擎盖下,它使用xlrd库does not support ods文件。
ods文件是否等效pandas.read_excel
?如果没有,我如何为Open Document Formatted电子表格(ods文件)做同样的事情? LibreOffice和OpenOffice使用ODF。
答案 0 :(得分:13)
答案 1 :(得分:8)
这是一个使用ezodf模块的快速而肮脏的黑客:
import pandas as pd
import ezodf
def read_ods(filename, sheet_no=0, header=0):
tab = ezodf.opendoc(filename=filename).sheets[sheet_no]
return pd.DataFrame({col[header].value:[x.value for x in col[header+1:]]
for col in tab.columns()})
测试:
In [92]: df = read_ods(filename='fn.ods')
In [93]: df
Out[93]:
a b c
0 1.0 2.0 3.0
1 4.0 5.0 6.0
2 7.0 8.0 9.0
注意:
header
,skiprows
,index_col
,parse_cols
都未在此功能中实现 - 如果您想要实现这些参数,请随时更新此问题ezodf
取决于lxml
确保已安装答案 2 :(得分:3)
另一种选择:read-ods-with-odfpy。该模块将OpenDocument电子表格作为输入,并返回一个列表,从中可以创建一个DataFrame。
答案 3 :(得分:2)
似乎答案是否定的! 而且我将描述在ODS中读取的工具仍然不规则。 如果您使用POSIX,可能是在使用Pandas'之前即时导出到xlsx的策略。非常好的xlsx导入工具是一个选项:
unoconv -f xlsx -o tmp.xlsx myODSfile.ods
总而言之,我的代码如下:
import pandas as pd
import os
if fileOlderThan('tmp.xlsx','myODSfile.ods'):
os.system('unoconv -f xlsx -o tmp.xlsx myODSfile.ods ')
xl_file = pd.ExcelFile('tmp.xlsx')
dfs = {sheet_name: xl_file.parse(sheet_name)
for sheet_name in xl_file.sheet_names}
df=dfs['Sheet1']
这里fileOlderThan()是一个函数(参见http://github.com/cpbl/cpblUtilities),如果tmp.xlsx不存在或者比.ods文件旧,则返回true。
答案 4 :(得分:2)
如果您只有几个.ods文件要阅读,我只需在openoffice中打开它并将其保存为excel文件。如果你有很多文件,你可以使用Linux中的unoconv
command以编程方式将.ods文件转换为.xls(with bash)
然后用pd.read_excel('filename.xls')
答案 5 :(得分:2)
我对熊猫read_clipboard感到很幸运。 选择单元格,然后从excel或opendocument复制。 在python中运行以下命令。
Math.ceil(number/1000)*1000;
根据复制的单元格,熊猫会做得很好。
答案 6 :(得分:2)
一些响应指出,要获得此功能,需要odfpy或其他外部软件包,但请注意,在最新版本的Pandas(当前版本为1.1,2020年8月)中,pd.ExcelWriter等功能支持ODS格式。 ()和pd.read_excel()。您只需指定属性引擎“ odf”即可使用OpenDocument文件格式(.odf,.ods,.odt)。
答案 7 :(得分:1)
pandas 现在支持 .ods 文件。您必须先安装 odfpy 模块。然后它将像普通的 .xls 文件一样工作。
conda install -c conda-forge odfpyr
然后
pd.read_excel('FILE_NAME.ods', engine='odf')
答案 8 :(得分:0)
如果可能,请从电子表格应用程序另存为CSV,然后使用pandas.read_csv()
。 IIRC,'ods'电子表格文件实际上是一个XML文件,它也包含相当多的格式信息。因此,如果是关于表格数据,请首先将此原始数据提取到中间文件(在本例中为CSV),然后您可以使用其他程序(例如Python / pandas)进行解析。
答案 9 :(得分:0)
支持在Pandas(xls和xlsx)中读取Excel文件,请参阅read_excel命令。您可以使用OpenOffice将电子表格另存为xlsx。转换也可以在命令行上自动完成,显然是使用convert-to command line parameter。
从xlsx读取数据可以避免在首次转换为CSV时可能遇到的一些问题(日期格式,数字格式,unicode)。
答案 10 :(得分:0)
在很大程度上基于davidovitch的回答(谢谢),我整理了一个{。{3}},它读取一个.ods文件并返回一个DataFrame。这并不是pandas
本身的完整实现,例如他的PR,但是它提供了一个简单的read_ods
函数来完成任务。
您可以使用pip install pandas_ods_reader
安装它。还可以指定文件是否包含标题行,并指定自定义列名。
答案 11 :(得分:0)
这在0.25大熊猫中可用。只要安装了odfpy,您就可以做到
SELECT
i.*
FROM
intersections AS i
INNER JOIN collisions AS c ON (
ST_WITHIN(c.Location, i.Area)
)