2014-09-02 58 views
0

數據幀列表的重命名列我有很多dataframes在熊貓

col = ['open', 'high', 'low', 'close'] 
index = [1, 2, 3, 4] 

df1 = pd.DataFrame(columns=col, index=index) 
df2 = pd.DataFrame(columns=col, index=index) 
df3 = pd.DataFrame(columns=col, index=index) 

dflist = [df1, df2, df3] 

我需要重命名列表中的所有dataframes的所有列的列表。我需要將每個數據框的名稱添加到每個列的名稱。我試圖用for循環來做到這一點。

for key in dflist: 
    key.rename(columns=lambda x: key+x) 

很明顯,這是行不通的。期望的輸出將是:

In [1]: df1.columns.tolist() 
Out [2]: ['df1open', 'df1high', 'df1low', 'df1close'] 

In [3]: df2.columns.tolist() 
Out [4]: ['df2open', 'df2high', 'df2low', 'df2close'] 

In [5]: df3.columns.tolist() 
Out [6]: ['df3open', 'df3high', 'df3low', 'df3close'] 

感謝您的幫助。

回答

3

您想使用字典而不是列表存儲DataFrames,如果你需要以某種方式訪問​​他們的「名字」和操縱它們編程(認爲當你有幾千)。還要注意使用inplace的說法,這是大熊貓中常見的:

import pandas as pd 

col = ['open', 'high', 'low', 'close'] 
index = [1, 2, 3, 4] 

df_all = {'df1': pd.DataFrame(columns=col, index=index), 
      'df2': pd.DataFrame(columns=col, index=index), 
      'df3': pd.DataFrame(columns=col, index=index)} 

for key, df in df_all.iteritems(): 
    df.rename(columns=lambda x: key+x, inplace=True) 

print df_all['df1'].columns.tolist() 

輸出:

['df1open', 'df1high', 'df1low', 'df1close'] 
1

這裏有幾個問題。首先,dflist是DataFrame的列表,而不是那些DataFrame的名稱。所以df1"df1"不一樣,這意味着key + x不是字符串連接。

其次,rename()函數返回一個新的DataFrame。所以你必須通過inplace=True參數來覆蓋現有的列名。

試試這個:

dflist = ['df1', 'df2', 'df3'] 
for key in dflist: 
    df = eval(key) 
    df.rename(columns=lambda x: key+x, inplace=True) 
+0

非常感謝您的解釋。 – hernanavella 2014-09-02 00:28:43