2017-08-17 45 views
2

考慮一些其他問題,該數據幀:如何使用pd.read_clipboard複製數據框時處理自定義命名索引?

  Constraint Name TotalSP  Onpeak Offpeak 
Constraint_ID    
77127 aaaaaaaaaaaaaaaaaa -2174.5  -2027.21 -147.29 
98333 bbbbbbbbbbbbbbbbbb -1180.62 -1180.62  0 
1049 cccccccccccccccccc -1036.53 -886.77  -149.76 

好像有一個索引Constraint_ID。當我試着使用pd.read_clipboard讀它,這是它如何被加載:

 Constraint    Name TotalSP Onpeak Offpeak 
0 Constraint_ID     NaN  NaN  NaN  NaN 
1   77127 aaaaaaaaaaaaaaaaaa -2174.50 -2027.21 -147.29 
2   98333 bbbbbbbbbbbbbbbbbb -1180.62 -1180.62  0.00 
3   1049 cccccccccccccccccc -1036.53 -886.77 -149.76 

這顯然是錯誤的。我該如何解決這個問題?

回答

5

read_clipboard默認使用空白的列分開。您看到的問題是由於第一列中的空白。如果指定兩個或多個空格作爲分隔符,以表格形式將找出索引列本身:

df = pd.read_clipboard(sep='\s{2,}') 

df 
Out: 
        Constraint Name TotalSP Onpeak Offpeak 
Constraint_ID            
77127   aaaaaaaaaaaaaaaaaa -2174.50 -2027.21 -147.29 
98333   bbbbbbbbbbbbbbbbbb -1180.62 -1180.62  0.00 
1049   cccccccccccccccccc -1036.53 -886.77 -149.76 

index_col參數也可以用來告訴大熊貓的第一列是索引,萬一結構無法從分離器單獨推斷:

df = pd.read_clipboard(index_col=0, sep='\s{2,}') 
+0

你能請編輯您的答案,包括'index_cols'?我覺得在這裏可以使用sep,但情況可能並非如此。或者......大熊貓默認照顧這個嗎? –

+0

@cᴏʟᴅsᴘᴇᴇᴅ我沒有違背一個例子,但我們可以通過'index_col = 0'是上當然在安全方面。 – ayhan

2

這不像@ ayhan的答案那麼酷,但大部分時間工作得很好。假設你正在使用的IPython或jupyter,只需將數據複製並粘貼到%%file

然後做一些快速編輯。隨着多指標,只要將指標向上行,這樣的事情(也縮短「約束ID」到「ID」,保存在這種情況下,一點點空間):

%%file foo.txt 
ID  Constraint Name TotalSP  Onpeak Offpeak 
77127 aaaaaaaaaaaaaaaaaa -2174.5  -2027.21 -147.29 
98333 bbbbbbbbbbbbbbbbbb -1180.62 -1180.62  0 
1049 cccccccccccccccccc -1036.53 -886.77  -149.76 

pd.read_fwf('foo.txt') 
Out[338]: 
     ID  Constraint Name TotalSP Onpeak Offpeak 
0 77127 aaaaaaaaaaaaaaaaaa -2174.50 -2027.21 -147.29 
1 98333 bbbbbbbbbbbbbbbbbb -1180.62 -1180.62  0.00 
2 1049 cccccccccccccccccc -1036.53 -886.77 -149.76 

read_fwf一般工作得很好的像這樣的表格東西,正確地處理列名稱中的空格(通常)。當然,您也可以使用這種基本方法read_csv

有關此方法的好處是,對於小樣本數據可以應對幾乎所有的用戶在這裏發表的數據怪異的方式。而且有很多奇怪的方法。 ;-)

+0

這實際上與我一直在做的事情類似。我會複製到文本編輯器,進行更改,然後再次調用'pd.read_clipboard'。 –

+0

我不知道爲什麼,但'read_fwf'一般的作品比'在我的經驗read_clipboard'更好。我期望後端非常相似,但也許它們有不同的默認值? – JohnE

相關問題