基于列标题获取Excel列字母 - Python

5
这似乎相对简单,但我还没有找到一个重复的答案来回答我的问题,或者一种具有所需功能的方法。
我有一个Excel电子表格,其中每个包含数据的列都有唯一的标题。 我想使用pandas通过将此标题字符串传递到函数中来获取列的字母键。
例如,如果我将“输出参数”传递给函数,我希望返回“M”:

enter image description here

我所找到的最接近的方法是第二个答案中概述的xlsxwriter.utility.xl_col_to_name(index)方法,详见将电子表格数字转换为列字母
这与我试图做的非常相似,然而我的工作表内的列号不会保持不变(不像标题会保持不变)。尽管如此,一个能够基于标题返回列号的方法也可以解决问题,因为我随后可以应用上述方法。 pandasxlsxwriter是否有一种能够处理上述情况的方法?

@psychemedia 是的,需要保留原始列字母。电子表格的目的是作为“建立自己的制造计算器”,因此应尽可能可定制化(因此很少假设为静态,使得遗漏变得困难)。下面的答案正是所需的。 - ChaddRobertson
所选答案并没有做到这一点...它是从数据框中预测列字母,如果数据框被保存到一个新的Excel文件中。如果数据框是从使用usecols=["B:E"]加载的电子表格创建的,xlsxwriter将把第一列识别为"A",就像数据框被写入新电子表格时一样。 - psychemedia
@psychemedia,在这种情况下,我不理解两者之间的区别-如果您有时间,能否详细说明一下?我已经实施了以下解决方案,输出结果如预期。也许我的原始问题措辞不太好。 - ChaddRobertson
1
可以从表格的中间加载数据到数据框中。例如,一个表格可能出现在电子表格中从D1开始,而不是A1,并跨越列D:G。使用usecols=D:G参数可以让您仅加载这些列。如果您保存了df,或者在数据框上使用xlsxwriter.utility.xl_col_to_name,它将返回具有列A:D的表格。我试图澄清是否需要从原始电子表格中识别列。 - psychemedia
1
值得注意的是,xlsxwriter 实用程序函数所做的所有工作都是获取从数据框检索到的列索引号并将其转换为列名称形式:https://github.com/jmcnamara/XlsxWriter/blob/550b9c5bd678c861dcc9f6f4072b33a69566e065/xlsxwriter/utility.py#L70 - psychemedia
显示剩余2条评论
1个回答

8

您可以尝试以下方法:

import xlsxwriter
col_no = df.columns.get_loc("col_name")
print(xlsxwriter.utility.xl_col_to_name(col_no))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接