2016-04-12 8 views
-1

これは私が気づいたことです。私のような初心者のファンにとっては便利だと思っています - なぜ最後の行にエラーがありますか? 1つのDataFrameから1つの列を選択するとSeriesとなり、[[]のような簡潔な構文で直接索引付けできます。ただし、DataFrameから列のリストを選択しても、[]を使用して直接スライスできないDataFrameが返されます。DataFrameは[]演算子を使用して直接的にスライスすることはできません

In[178]: df 
Out[177]: 
    name age sex  job 
0 John 15 M Student 
1 Mike 30 M  Labor 
2 Lily 41 F Student 
3 Dave 66 M  Labor 
4 Sam 23 F Scientist 
5 Luke 7 M  Labor 
6 Ellen 80 F  Labor 
7 Jacob 52 M  Actor 
In[179]: df.set_index('name', inplace=True, drop=True) 
In[180]: df 
Out[179]: 
     age sex  job 
name      
John 15 M Student 
Mike 30 M  Labor 
Lily 41 F Student 
Dave 66 M  Labor 
Sam  23 F Scientist 
Luke  7 M  Labor 
Ellen 80 F  Labor 
Jacob 52 M  Actor 
In[181]: df['age']['John'] 
Out[180]: 15 
In[182]: type(df['age']) 
Out[181]: pandas.core.series.Series 
In[183]: type(df[['age']]) 
Out[182]: pandas.core.frame.DataFrame 
In[184]: df[['age']]['John'] # This is Wrong 
+0

私は正確に読みやすくするために努力しています。しかし、多くのPythonプログラマが使用されているように、IDE(この場合はPyCharm)から背景全体と前景色をStackOverflowに貼り付ける方法を見つけることはできませんでした。教えて下さい。私はヘルプを読んで、私は基本的なHTMLのサポートを見つけるだけです。言語固有のハイライトサポートが見つかりませんでした。申し訳ありません。 – Indominus

+1

よかった、ありがとう。私はすべての私の記事を編集するつもりです。私が写真を投稿することを決めたとき、私は最高の意思を念頭に置いていました。実際には、コード・テキスト上のCtrl + Kだけでなく、スクリーンショットを撮って写真を保存してそこにアップロードするのがもっと難しくなります。 – Indominus

答えて

1

最後の行を使用するには、このようにする必要がありますdf[['age']]['age'][df['name'] =='John']。これは明らかに悪いスタイルです。コードの最後の行が動作していない理由は、あなたが使用してデータフレームをスライスしようとするとdf[['age']]は、0から7

In [4]: df[['age']] 
Out[4]: 
    age 
0 15 
1 30 
2 41 
3 66 
4 23 
5 7 
6 80 
7 52 

から「時代」とインデックスをという名前の単一の列を持つデータフレームを返すことです'John'、Pandasはデータフレームをチェックし、という名前の列であるを見つけることができません。あなたは次のことをして、ジョンの年齢を見つけることができます

In [15]: df[['age']]['age'][df['name'] =='John'] 
Out[15]: 
0 15 
Name: age, dtype: int64 

# get the exact value 
In [16]: df[['age']]['age'][df['name'] =='John'][0] 
Out[16]: 
15 

# or simply 
In [18]: df[df['name'] =='John']['age'][0] 
Out[18]: 15 
関連する問題