2016-04-27 34 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

另外,我將如何去尋找適合一些標準的多列中的所有行? –