2016-11-28 92 views
2

我創造了這個數據幀:重命名大熊貓數據幀未命名的多指標列

import pandas as pd 
columns = pd.MultiIndex.from_tuples([("x", "", ""), ("values", "a", "a.b"), ("values", "c", "")]) 
df0 = pd.DataFrame([(0,10,20),(1,100,200)], columns=columns) 
df0 

我卸載df0擅長:

df0.to_excel("test.xlsx") 

,並再次將其裝入:

df1 = pd.read_excel("test.xlsx", header=[0,1,2]) 
df1 

而且我有Unnamed :...列名。

爲了讓df1樣子inital df0我運行:

def rename_unnamed(df, label=""): 
    for i, columns in enumerate(df.columns.levels): 
     columns = columns.tolist() 
     for j, row in enumerate(columns): 
      if "Unnamed: " in row: 
       columns[j] = "" 
     df.columns.set_levels(columns, level=i, inplace=True) 
    return df 

rename_unnamed(df1) 

幹得好。但有沒有熊貓的方式從盒子做到這一點?

回答

1

您可以通過contains使用numpy.where與條件:

for i, col in enumerate(df1.columns.levels): 
    columns = np.where(col.str.contains('Unnamed'), '', col) 
    df1.columns.set_levels(columns, level=i, inplace=True) 

print (df1) 
    x values  
      a c 
     a.b  
0 0  10 20 
1 1 100 200 
+0

不幸的大熊貓對此沒有的功能。 'str.contains'只能和'Series'一起使用,所以需要'for'。 – jezrael