【问题标题】:Pandas read_excel keep A:Z column namesPandas read_excel 保留 A:Z 列名
【发布时间】:2018-02-13 18:20:58
【问题描述】:

当使用 read_excel 将 excel 文件导入 pandas 时,我想保留 excel 的列名和行名。 即,我希望我的列被命名为 'A'、'B'、...'Z'、'AA'、'AB' 等以及从 1 开始的行。

有什么好办法吗?

【问题讨论】:

    标签: python excel pandas


    【解决方案1】:

    您需要自定义mappings 并将其应用于rename

    np.random.seed(100)
    df = pd.DataFrame(np.random.randint(10, size=(5,5)))
    print (df)
       0  1  2  3  4
    0  8  8  3  7  7
    1  0  4  2  5  2
    2  2  2  1  0  8
    3  4  0  9  6  2
    4  4  1  5  3  4
    
    def colToExcel(col): # col is 1 based
        excelCol = str()
        div = col 
        while div:
            (div, mod) = divmod(div-1, 26) # will return (x, 0 .. 25)
            excelCol = chr(mod + 65) + excelCol
    
        return excelCol
    
    df = df.rename(index=lambda x: x+1, columns=lambda y: colToExcel(y+1) )
    print (df)
       A  B  C  D  E
    1  8  8  3  7  7
    2  0  4  2  5  2
    3  2  2  1  0  8
    4  4  0  9  6  2
    5  4  1  5  3  4
    

    替代方案:

    def conv(num):
        convStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" # Assign any base you'd like
        b = len(convStr)
        if num<b:
            return convStr[num]
        else:
            return conv(num//b-1) + convStr[num%b]
    
    df = df.rename(index=lambda x: x+1, columns=lambda y: colToExcel(y) )
    

    【讨论】:

    • 不错,但 colToExcel 函数看起来过于复杂。或者也许不是 +1
    • @AntonvBR - 是的,也许应该更好,我只想重用现有功能;)谢谢。
    • tbh,这可以解决问题,但我不确定它会如何变得更好。只是我的第一个想法。
    • @AntonvBR - 谢谢。
    • 我环顾四周,改编了一个可用于任何基础的函数。
    【解决方案2】:

    我前段时间做了什么:我用列类型和“header”参数指定了列名称为“None”:

    def converter(dict):
                converter = {}
                for key in dict:
                    converter[key] = str
                return converter
    
    columntype_table = {'A': datatype.str,
                            'B': datatype.str,
                            'C': datatype.str,
                            'D': datatype.str,
                            'E': datatype.str,
                            'F': datatype.str,
                            'G': datatype.str,
                            'H': datatype.str}
    
    data = pandas.read_excel(fileX, encoding=X, sheetname=Y, converters=converterDic(columns_dict), header=None)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      相关资源
      最近更新 更多