场景:我有一个数据框列表。我试图重命名列并更改其顺序,但是列名称不完全匹配,例如:列可能是“ iterationlist”或“ iteration”。

我尝试在一个循环内循环以读取所有列,如果名称包含我需要的名称,请更改该列的名称,但出现错误:

TypeError: unhashable type: 'list'


码:

import pandas as pd
import os
from Tkinter import Tk
from tkFileDialog import askdirectory
from os import listdir
from os.path import isfile, join
import glob

# Get content
mypath = "//DGMS/Desktop/uploaded"
all_files = glob.glob(os.path.join(mypath, "*.xls*"))
contentdataframes = [pd.read_excel(f).assign(Datanumber=os.path.basename(f).split('.')[0].split('_')[0], ApplyOn='')
     for f in all_files]

#get list of dates and put to dfs

for dfs in contentdataframes:
    dfs.rename(index=str, columns={[col for col in dfs.columns if 'iteration' in col]: "iterationlistfinal"})


问题:执行此操作的正确方法是什么?

最佳答案

我认为需要str.contains来通过子字符串获取列名称,然后再通过连接两个列表的子集对列进行重新排序:

contentdataframes = []

for f in all_files:
    df = pd.read_excel(f)
    df['Datanumber'] = os.path.basename(f).split('.')[0].split('_')[0]
    df['ApplyOn']= ''
    mask = df.columns.str.contains('iteration')
    c1 = df.columns[mask].tolist()
    c2 = df.columns[~mask].tolist()
    df = df[c1 + c2]
    contentdataframes.append(df)

关于python - 给定数据框中的列重命名,因为该列包含循环中的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51246827/

10-12 21:53
查看更多