web-dev-qa-db-ja.com

pandasカット:カテゴリラベルを文字列に変換する方法(そうでない場合、Excelにエクスポートできません)?

Pandas.cut()を使用して連続変数を範囲に離散化し、結果ごとにグループ化します。

何が悪いのかわからなかったので何度も悪口を言いましたが、カスタムラベルを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'] )

その後、すべて正常に実行されます。カスタムラベルを割り当てずにこれを処理する方法について何か提案はありますか?作業の初期段階では、必要なビンの数がまだわからないため、ラベルを割り当てない傾向があります。これは試行錯誤のアプローチであり、試行ごとにラベルを割り当てるには時間がかかります。

これがバグとして数えることができるかどうかはわかりませんが、少なくとも、文書化された煩わしさのようには見えません。

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

7
Scott Boston