2017-08-23 15 views
-4

ブール値のデータフレームが1 * 20000列あります。 データフレーム(551行* 20000列)の列を選択するには、これらのブール値が必要です。別のデータフレームのブール値を使用したpandas列の選択

[In] web.shape 
    [Out] (550, 20000) 
    [In] language.shape 
    [Out] (1, 20000) 
    [In] language 
    [Out] Index(['zh', 'zh', 'zh', 'zh', 'zh', 'zh', 'zh', 'zh', 'zh', 'zh', 
    ...'na', 'na', 'na', 'na', 'na', 'na', 'na', 'na', 'na', 'na'], 
     dtype='object', name='Page', length=20000) 

今、私は言語は中国(「亜鉛」)であるウェブのこれらの列を取り出したいのですつまり、言語の列の位置TRUE .Iどこがそれらを必要とします列はと別のデータフレームです。列の名前は、Webと言語で異なります。

[In] language=pd.DataFrame(language) 

    [In] English =web.iloc[:,language=='zn'] 
    [Out] ValueError: Buffer has wrong number of dimensions (expected 1, got 2) 

エラーが言語データフレームのインデックスによって発生していることがわかりました。私はそれを避けるための良い解決策がなければならないと考えています。ありがとうございました。

+0

これまでに何を試しましたか? –

+1

Stack Overflowへようこそ。[welcomeツアー](https://stackoverflow.com/tour)にアクセスして、ここであなたのやり方を知る(また、最初のバッジを獲得する)時間を取ってください。最小限で完全で検証可能な例](https://stackoverflow.com/help/mcve)を参照してください。また、[How to Ask Good Questions](https://stackoverflow.com/help/how-to-ask)もチェックしてください。あなたはフィードバックと有用な答えを得る機会を増やします。 –

+1

@greg_dataに説明とコードが追加されました。ありがとうございました –

答えて

0

簡単な例を考えてみましょう。ここでそのプロセスを説明します。

language = pd.Index(['zh', 'zh', 'zh', 'zh', 'zh', 'zh', 'zh', 'zh', 'zh','zh','na', 'na', 'na', 'na', 'na', 'na', 'na', 'na', 'na', 'na'], 
    dtype='object', name='Page') 

web = pd.DataFrame(columns = range(len(language))) 

web.shape 
(0, 20) 

language.shape 
(0, 20) 

だから同じ数の列を持っている両方の、そしてあなたはlanguageで同等のエントリが'zh'あるカラムだけまでwebをフィルタリングします。

は、私はあなたのコードを実行すると:

English = web.iloc[:,language=='zh'] 

それがエラーを返しませんが、それはあなたが後にあるものを返します。これは私があなたの記述でここに見ていないいくつかのコードがあると信じさせてくれます。

あなたがなりたいものに別の解決策:

English = web[[i for i,j in zip(web.columns, language) if j == 'zh']] 

言語の等価が所望の値に等しいもウェブで列のみを返します。

関連する問題