2016-04-27 32 views
1

在下面的代码片段中,我试图将一些列(包含'Hosted Meetings')重新命名为'Hosted Meetings [date]'。这是我打印所有i时发生的情况。但是,它不会将其保存到df。遍历列并根据规则重命名

all_users_sheets_hosts = [] 

for f in glob.glob("./users-export-*.xlsx"): 
    df = pd.read_excel(f) 
    all_users_sheets_hosts.append(df) 
    j = re.search('(\d+)', f) 
    for i in df.columns.values: 
     if 'Hosted Meetings' in i: 
      i = ('Hosted Meetings' + ' ' + j.group(1)) 

回答

2

迭代器i是数组值的副本,而不是指针。解决这个问题的方法之一将是enumerate通过索引而不是值本身:

for i, val in enumerate(df.columns.values): 
    if 'Hosted Meetings' in val: 
     df.columns[i] = ('Hosted Meetings' + ' ' + j.group(1)) 

但在任何情况下它的功能更强大的风格的优势很好的例证。你的情况,你可以把列作为str类型的熊猫系列,因此你可以使用它的矢量化replace,在一个声明中重新命名列:

df.columns = df.columns.str.replace('.*Hosted Meeings.*', 
            'Hosted Meetings' + ' ' + j.group(1)) 
+0

精彩。新的python,这有助于我学习和我的问题 –

+0

无后顾之忧,我已经增加了一点,以告诉你如何解决你的循环,但它几乎总是更好(更快/更安全/少bug)使用矢量化操作如果你能弄清楚如何。 – maxymoo

+0

另外,我将如何去寻找适合一些标准的多列中的所有行? –