Pandas读取Excel文件时如何保留A:Z列名

4
使用pandas中的read_excel方法将excel文件导入时,希望保留excel表格中的行和列名称。例如,我希望将我的列命名为“A”、“B”、...、“Z”、“AA”、“AB”等,将行命名为从1开始的数字。请问有什么好的方法可以实现这个功能吗?
2个回答

5

你需要定制 映射 并将其应用到 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) )

说实话,这个可以解决问题,我不确定它怎么能更好。这只是我的第一个想法。 - Anton vBR
@AntonvBR - 谢谢。 - jezrael
嗨@jezrael,为什么我们不能在pd.read_excel中使用“chunksize”,但是我们可以在csv文件中执行呢? - Pyd
@pyd - 不确定是否理解,你为什么这样认为? - jezrael
@pyd - 我已经检查过了,你是正确的。read_excel。这是一个难题,也许不容易在pandas中实现。 - jezrael
显示剩余3条评论

0
我之前做的事情是:我用列类型和“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)

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