2014-11-08 86 views
0

我的CSV文件在前兩行中有我想用作列名的名稱和前兩列作爲行名。因此,這個文件看起來是這樣的:如何在熊貓數據框中分配層次列名

tp,desc,L,L,D,D 
,,1,2,3,4 
3001, foo, 23.1, 35.3, 52.0, 11.9 
3010, bar, 31.l, 25.9, 13.9, 134.8 

我能夠設置第一個兩列的索引,但我堅持在得到前兩行被接受爲列名

這是我的輸入目前爲止的聲明:

df = pd.read_csv("file.csv", index_col=[tp,desc]) 

謝謝。

回答

0

嘗試使用index_col指定「索引」列,並對您必須能夠讀取的數據進行解碼。

from io import StringIO 
import pandas as pd 

data="tp,desc,L,L,D,D\n,,1,2,3,4\n3001, foo, 23.1, 35.3, 52.0, 11.9\n3010, bar, 31.l, 25.9, 13.9, 134.8" 
df= pd.read_csv(StringIO(data.decode('UTF-8')),sep=',', index_col=[0,1]) 
print df 

輸出:

   L L.1  D D.1 
tp desc       
NaN NaN  1 2.0 3.0 4.0 
3001 foo 23.1 35.3 52.0 11.9 
3010 bar 31.l 25.9 13.9 134.8 

嘗試讀取該文件,並將其轉換這種方式。有不同的解決方案here。但通常這可以解決問題。

with open('example.csv', 'rb') as f: 
    csv = f.read().decode("utf-8") 
0

可能是你可以嘗試用:

import pandas as pd 

df = pd.read_csv('file.csv', header=None) 

# getting names for columns and index: 
cnames = zip(df.iloc[0,2:], df.iloc[1,2:]) 
inames = list(df.iloc[0,:2])  

#drop the rows with column names (for columns and index) 
df.drop([0,1],axis=0,inplace=True) 
#set the indexes 
df.set_index([0,1],inplace=True) 
# set the names for columns and indexes 
df.columns = pd.MultiIndex.from_tuples(cnames) 
df.index.names = inames 

結果是:

   L    D   
       1  2  3  4 
tp desc        
3001 foo 23.1 35.3 52.0 11.9 
3010 bar 31.l 25.9 13.9 134.8 

我用下面的文件內容:

tp,desc,L,L,D,D 
,,1,2,3,4 
3001, foo, 23.1, 35.3, 52.0, 11.9 
3010, bar, 31.l, 25.9, 13.9, 134.8