Pandasデータ分析-第二章(Pandasデータ構造Dataframe)
10765 ワード
Pandasデータ分析-第二章(Pandas入門:データ構造Dareframe)
第一章:Pandasデータ構造SeriesにはSeriesの文章が添付されており、Dataframeを見る前にSeriesとは何かを理解しなければならない.
DataFrame
DataFrameは表型のデータ構造です(表はわかります).各列は、詩の異なる値タイプ(数値、文字列、ブール値)であってもよく、Seriesからなる辞書として理解され、Seriesを振り返ると、Seriesは1次元配列であり、インデックス付きの1次元配列である.DataFrameはSeriesで構成された「辞書」と理解できる.実はDataFrameの中のデータは1つ以上の2次元ブロックで保存されています(リスト辞書ではありません)、もちろん具体的に何なのかはここで議論しても意味がありません.最も重要なのはDataFrameがどのように使われているのかです.もう1つのDataFrameは本当に使いやすくて、とても使いやすくて、普通ではありません.使いやすい!こうやって長いことしゃべったが,具体的な例を見てみればわかる.
DataFrameを構築する方法はいろいろありますが、最も一般的なのは辞書を渡すことです(リストでもいいです)
入力される辞書にも制限があり、すべての辞書の「値」は等長のリストまたはSeriesでなければなりません.辞書のキーはcolumnsを生成し、もちろんindexとcolumnsを自分で設定することもできます.
columnsの順序を変更することでカラムの順序を制御でき、入力されたカラムがデータに見つからないとNA値が生成されます.
ディクショナリでは、DataFrameのカラムをSeriesとして取得できます.
では、1行を取るにはどうすればいいのでしょうか.
このixメソッドはまだ使えますが、推奨されています.locと.iloc、この2つの方法を見てみましょう
これは上のixと同じで、インデックス名で値を取り、取り出されたSeriesのインデックスも設定されていますが、便利ではないでしょうか.
上のお勧めをもう一度見てください.iloc
これですか.ilocはリストのスライスに似ている.ilocの値はインデックス名ではなく、その順序でスライスされた値です.この2つの方法はここで簡単に紹介するだけで、後で自分で言います.
以前、私たちのDataFrameにはすべての値がNAだったので、この列に値を割り当てることができました.
このようにしてSeriesを直接転送することもできます
リストに転送することもできます
入力された値がSeriesの場合、indexに従って一致します.
辞書を直接伝えてもいいですか?
Emm、だめだと思います.みんなは自分でやってもいいですが、いくつかの前提があります.長さはDataFrameの長さと一致しなければならない(多くなれば誤報が少なくてもよい).リストは辞書でいいが、キーを割り当てるしかない.割り当てられたSeries長がDataFrameよりも少ない場合、欠落した値はNAです.
Seriesの長さがDataFrameより少ない場合を見てみましょう
全体的にDataFrameに値を付けるのは便利です.
視野を広げるためにDataFrameに値を付けてもいいです
意味は私が“new”という新しい列を作成したので、この列のデータはdf[‘year’]>2000で、明らかに後でこれはブール値(DataFrameはもちろんブール値を保存することができます)で、意味はyearが2000より大きいかどうか、Trueを返すより大きいかどうか、Falseを返すより小さいかどうかです.では選別してみましょう
DataFrameの修正については、実際には正しい使い方や間違った使い方の詳細がたくさんあります.DataFrameは英語が下手でも影響しません.コードを見ればいいのです.この節では、DataFrameを作成する方法、修正する方法について主に説明します.ついでに、スライスと値を取ることを簡単に学びました.その後はDataFrameのインデックスオブジェクトで、知識点も多く雑多です.とにかく頑張りましょう
第一章:Pandasデータ構造SeriesにはSeriesの文章が添付されており、Dataframeを見る前にSeriesとは何かを理解しなければならない.
DataFrame
DataFrameは表型のデータ構造です(表はわかります).各列は、詩の異なる値タイプ(数値、文字列、ブール値)であってもよく、Seriesからなる辞書として理解され、Seriesを振り返ると、Seriesは1次元配列であり、インデックス付きの1次元配列である.DataFrameはSeriesで構成された「辞書」と理解できる.実はDataFrameの中のデータは1つ以上の2次元ブロックで保存されています(リスト辞書ではありません)、もちろん具体的に何なのかはここで議論しても意味がありません.最も重要なのはDataFrameがどのように使われているのかです.もう1つのDataFrameは本当に使いやすくて、とても使いやすくて、普通ではありません.使いやすい!こうやって長いことしゃべったが,具体的な例を見てみればわかる.
DataFrameを構築する方法はいろいろありますが、最も一般的なのは辞書を渡すことです(リストでもいいです)
In [34]: data = {'location':['beijing','hebei','tianjin','shandong'],'year':[2011,2013,2019,1998],'num':[1.4,1.8,-2.1,3.6]}
In [35]: data
Out[35]:
{'location': ['beijing', 'hebei', 'tianjin', 'shandong'],
'year': [2011, 2013, 2019, 1998],
'num': [1.4, 1.8, -2.1, 3.6]}
In [36]: df = pd.DataFrame(data)
In [37]: df
Out[37]:
location year num
0 beijing 2011 1.4
1 hebei 2013 1.8
2 tianjin 2019 -2.1
3 shandong 1998 3.6
入力される辞書にも制限があり、すべての辞書の「値」は等長のリストまたはSeriesでなければなりません.辞書のキーはcolumnsを生成し、もちろんindexとcolumnsを自分で設定することもできます.
In [50]: data = {'location':['beijing','hebei','tianjin','shandong'],'year':[2011,2013,2019,1998],'num':[1.4,1.8,-2.1,3.6]}
In [51]: df = pd.DataFrame(data,index=['a','b','c','d'],columns=['year','num','location','shit'])
In [52]: df
Out[52]:
year num location shit
a 2011 1.4 beijing NaN
b 2013 1.8 hebei NaN
c 2019 -2.1 tianjin NaN
d 1998 3.6 shandong NaN
columnsの順序を変更することでカラムの順序を制御でき、入力されたカラムがデータに見つからないとNA値が生成されます.
ディクショナリでは、DataFrameのカラムをSeriesとして取得できます.
In [53]: df['year']
Out[53]:
a 2011
b 2013
c 2019
d 1998
Name: year, dtype: int64
In [54]: df.location
Out[54]:
a beijing
b hebei
c tianjin
d shandong
Name: location, dtype: object
では、1行を取るにはどうすればいいのでしょうか.
In [55]: df.ix['a']
/Users/gn/anaconda3/bin/ipython:1: DeprecationWarning:
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing
See the documentation here:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated
#!/Users/gn/anaconda3/bin/python
Out[55]:
year 2011
num 1.4
location beijing
shit NaN
Name: a, dtype: object
このixメソッドはまだ使えますが、推奨されています.locと.iloc、この2つの方法を見てみましょう
In [56]: df.loc['a']
Out[56]:
year 2011
num 1.4
location beijing
shit NaN
Name: a, dtype: object
これは上のixと同じで、インデックス名で値を取り、取り出されたSeriesのインデックスも設定されていますが、便利ではないでしょうか.
上のお勧めをもう一度見てください.iloc
In [57]: df.iloc[1]
Out[57]:
year 2013
num 1.8
location hebei
shit NaN
Name: b, dtype: object
In [58]: df.iloc[:2]
Out[58]:
year num location shit
a 2011 1.4 beijing NaN
b 2013 1.8 hebei NaN
これですか.ilocはリストのスライスに似ている.ilocの値はインデックス名ではなく、その順序でスライスされた値です.この2つの方法はここで簡単に紹介するだけで、後で自分で言います.
以前、私たちのDataFrameにはすべての値がNAだったので、この列に値を割り当てることができました.
In [61]: df['shit']=10.1
In [62]: df
Out[62]:
year num location shit
a 2011 1.4 beijing 10.1
b 2013 1.8 hebei 10.1
c 2019 -2.1 tianjin 10.1
d 1998 3.6 shandong 10.1
このようにしてSeriesを直接転送することもできます
In [64]: df['shit'] = np.arange(4)
In [65]: df
Out[65]:
year num location shit
a 2011 1.4 beijing 0
b 2013 1.8 hebei 1
c 2019 -2.1 tianjin 2
d 1998 3.6 shandong 3
リストに転送することもできます
In [66]: df['shit'] = [3,2,1,1]
In [67]: df
Out[67]:
year num location shit
a 2011 1.4 beijing 3
b 2013 1.8 hebei 2
c 2019 -2.1 tianjin 1
d 1998 3.6 shandong 1
入力された値がSeriesの場合、indexに従って一致します.
In [68]: df['shit'] = pd.Series([1,2,3,4],index=['d','c','b','a',])
In [69]: df
Out[69]:
year num location shit
a 2011 1.4 beijing 4
b 2013 1.8 hebei 3
c 2019 -2.1 tianjin 2
d 1998 3.6 shandong 1
辞書を直接伝えてもいいですか?
In [70]: df['shit'] = {'a':1.1,'b':2.2,'c':3.3,'d':4.4}
In [71]: df
Out[71]:
year num location shit
a 2011 1.4 beijing a
b 2013 1.8 hebei b
c 2019 -2.1 tianjin c
d 1998 3.6 shandong d
Emm、だめだと思います.みんなは自分でやってもいいですが、いくつかの前提があります.長さはDataFrameの長さと一致しなければならない(多くなれば誤報が少なくてもよい).リストは辞書でいいが、キーを割り当てるしかない.割り当てられたSeries長がDataFrameよりも少ない場合、欠落した値はNAです.
Seriesの長さがDataFrameより少ない場合を見てみましょう
In [74]: df
Out[74]:
year num location shit
a 2011 1.4 beijing NaN
b 2013 1.8 hebei 3.0
c 2019 -2.1 tianjin 2.0
d 1998 3.6 shandong 1.0
全体的にDataFrameに値を付けるのは便利です.
視野を広げるためにDataFrameに値を付けてもいいです
In [75]: df['new'] = df['year'] > 2000
In [76]: df
Out[76]:
year num location shit new
a 2011 1.4 beijing NaN True
b 2013 1.8 hebei 3.0 True
c 2019 -2.1 tianjin 2.0 True
d 1998 3.6 shandong 1.0 False
意味は私が“new”という新しい列を作成したので、この列のデータはdf[‘year’]>2000で、明らかに後でこれはブール値(DataFrameはもちろんブール値を保存することができます)で、意味はyearが2000より大きいかどうか、Trueを返すより大きいかどうか、Falseを返すより小さいかどうかです.では選別してみましょう
In [77]: df[df['new'] == True]
Out[77]:
year num location shit new
a 2011 1.4 beijing NaN True
b 2013 1.8 hebei 3.0 True
c 2019 -2.1 tianjin 2.0 True
DataFrameの修正については、実際には正しい使い方や間違った使い方の詳細がたくさんあります.DataFrameは英語が下手でも影響しません.コードを見ればいいのです.この節では、DataFrameを作成する方法、修正する方法について主に説明します.ついでに、スライスと値を取ることを簡単に学びました.その後はDataFrameのインデックスオブジェクトで、知識点も多く雑多です.とにかく頑張りましょう