我正在使用 polars v1.12.0 从 Excel 表读取数据。
pl.read_excel(
"test.xlsx",
sheet_name="test",
has_header=True,
columns=list(range(30, 49))
)
请求的列已正确导入。但是,polars 为每个列名添加了后缀_1
。有一个列标题_3
添加了后缀。
在请求的列中,所有列标题都是唯一的,即没有重复。但是,此导入区域之前的列确实具有相同的值。例如,已加后缀的标题_3
确实在我的导入区域之前出现了两次。
看起来极点正在从“A”列开始扫描所有列标题,无论我是否从“AE”列开始读取。
我想知道发生了什么事?这是一个错误还是我犯了一个错误?
我不认为你犯了错误,只是不同引擎之间的行为似乎有很大差异,而且没有一个能做你想做的事情。
我有以下 Excel :
对于以下代码片段:
这是我使用不同的 Excel 引擎得到的结果:
炉甘石(默认)
因此顺序似乎是:
columns
Xlsx2csv(之前的默认)
是的,它确实完全删除了 charlie、delta 和 echo。我认为这是一个直接的错误。如果从 0 开始索引并列出所有列,它会显示所有列,但如果从 1 开始,它已经删除了
alfa
ANDbravo
。开放的PYXL
现在,这将首先删除具有重复名称的所有列,然后获取在中定义的列索引
columns
。严格来说,甚至不是删除,但是columns
而不考虑中的重复名称第 3、4 和 5 列现在为
delta, echo foxtrot
,而第 6 和 7 列则指向无处。该怎么办
因此,基于此,我认为最好的选择是使用默认
calamine
引擎,然后手动覆盖列:至于评论中关于堆叠不同名称的列的困境,这种方法“有效”,但前提是您事先知道列名和架构。这种方法也非常丑陋,而且性能可能不太好。我希望有更好的方法。
无论如何,读取所有 Excel 列然后操作 df 的解决方案可能比尝试操作阅读器更容易。
对于有列的 Excel
alfa | bravo | charlie | alfa | bravo | charlie