1

pandas を発見したばかりで、その機能に感銘を受けました。MultiIndex を使用して DataFrame を操作する方法がわかりません。

2 つの質問があります。

(1) DataFrame のエクスポート

ここで私の問題:このデータセット

import pandas as pd
import StringIO
d1 = StringIO.StringIO(
     """Gender,Employed,Region,Degree
     m,yes,east,ba
     m,yes,north,ba
     f,yes,south,ba
     f,no,east,ba
     f,no,east,bsc
     m,no,north,bsc
     m,yes,south,ma
     f,yes,west,phd
     m,no,west,phd
     m,yes,west,phd """
   )

df = pd.read_csv(d1)

# Frequencies tables
tab1 = pd.crosstab(df.Gender, df.Region)
tab2 = pd.crosstab(df.Gender, [df.Region, df.Degree])
tab3 = pd.crosstab([df.Gender, df.Employed], [df.Region, df.Degree])

# Now we export the datasets 
tab1.to_excel('H:/test_tab1.xlsx')  # OK 
tab2.to_excel('H:/test_tab2.xlsx') # fails 
tab3.to_excel('H:/test_tab3.xlsx') # fails 

私が考えることができる1つの回避策は、列を変更することです(Rが行う方法)

def NewColums(DFwithMultiIndex):
       NewCol = []
       for item in DFwithMultiIndex.columns:
               NewCol.append('-'.join(item))
       return NewCol 

# New Columns 
tab2.columns = NewColums(tab2)
tab3.columns = NewColums(tab3)

# New export  
tab2.to_excel('H:/test_tab2.xlsx')  # OK
tab3.to_excel('H:/test_tab3.xlsx')  # OK

私の質問は次のとおりです。ドキュメントで見逃したパンダでこれを行うより効率的な方法はありますか?

2) 列の選択

この新しい構造では、特定の変数で列を選択することはできません (そもそも階層インデックスの利点です)。特定の文字列 (例: '-ba') を含む列を選択するにはどうすればよいですか?

PS:関連するこの質問を見ましたが、提案された返信を理解していません

4

1 に答える 1

2

これは のバグのように見えますがto_excel、現時点では回避策として使用することをお勧めしto_csvます (この問題は発生していないようです)。

これを github の問題として追加しました。

2番目の質問に答えるには、本当に使用する必要がある場合to_excel...

filter以下を含む列のみを選択するために使用できます'-ba'

In [21]: filter(lambda x: '-ba' in x, tab2.columns)
Out[21]: ['east-ba', 'north-ba', 'south-ba']

In [22]: tab2[filter(lambda x: '-ba' in x, tab2.columns)]
Out[22]: 
        east-ba  north-ba  south-ba
Gender                             
     f        1         0         1
     m        1         1         0
于 2013-01-15T19:29:30.967 に答える