2017-10-16 369 views
2

我使用pandas.cut()將連續變量分散到一個範圍內,然後按結果分組。pandas cut:如何將分類標籤轉換爲字符串(否則不能導出到Excel)?

經過大量的發誓,因爲我無法弄清楚什麼是錯誤的,我已經瞭解到,如果我不爲cut()函數提供自定義標籤,而是依賴於默認值,那麼輸出不能被出口到excel。如果我試試這個:

import pandas as pd 
import numpy as np  

writer = pd.ExcelWriter('test.xlsx') 
wk = writer.book.add_worksheet('Test') 

df= df= pd.DataFrame(np.random.randint(1,10,(10000,5)), columns=['a','b','c','d','e']) 
df['range'] = pd.cut(df['a'],[-np.inf,3,8,np.inf]) 
grouped=df.groupby('range').sum() 
grouped.to_excel(writer, 'Export') 
writer.close() 

我得到:

raise TypeError("Unsupported type %s in write()" % type(token)) 
TypeError: Unsupported type <class 'pandas._libs.interval.Interval'> in write() 
which it took me a while to decypher. 

相反,如果我不分配標籤:

df['range'] = pd.cut(df['a'],[-np.inf,3,8,np.inf], labels =['<3','3-8','>8']) 

那麼這一切運行良好。 關於如何處理這個沒有分配自定義標籤的任何建議?在我工作的最初階段,我傾向於不分配標籤,因爲我仍然不知道我需要多少個分類 - 這是一種試驗和錯誤的方法,並且在每次嘗試時分配標籤都會非常耗時。

我不確定這是否可以算作一個錯誤,但至少它似乎是一個記錄不好的煩惱!

+0

'DF [ '範圍'] = pd.cut(DF [ 'A'],[ - np.inf,3,8,np.inf],labels = ['<3','3-8','> 8'])。astype(str)' –

+0

問題在於如何在沒有明確指定標籤的情況下做到這一點 –

+0

您可以不使用'labels' kwargs ,AF AIK –

回答

2

使用astype(str)

writer = pd.ExcelWriter('test.xlsx') 
wk = writer.book.add_worksheet('Test') 

df= df= pd.DataFrame(np.random.randint(1,10,(10000,5)), columns=['a','b','c','d','e']) 
df['range'] = pd.cut(df['a'],[-np.inf,3,8,np.inf]).astype(str) 
grouped=df.groupby('range').sum() 
grouped.to_excel(writer, 'Export') 
writer.close() 

輸出在Excel:

range a b c d e 
(-inf, 3.0] 6798 17277 16979 17266 16949 
(3.0, 8.0] 33150 28051 27551 27692 27719 
(8.0, inf] 9513 5153 5318 5106 5412 

enter image description here

相關問題