pandasパッケージをインストールしてPython3でデータ構造を操作する方法
序章
Python pandas
パッケージは、データの操作と分析に使用され、ラベル付けされたデータまたはリレーショナルデータをより直感的な方法で操作できるように設計されています。
に基づいて構築 numpy
パッケージ、 pandas
ラベル、説明的なインデックスが含まれており、一般的なデータ形式や欠落データの処理に特に堅牢です。
The pandas
パッケージはスプレッドシート機能を提供しますが、データの操作はスプレッドシートよりもPythonの方がはるかに高速です。 pandas
非常に効率的であることが証明されています。
このチュートリアルでは、最初にインストールします pandas
次に、基本的なデータ構造であるSeriesおよびDataFramesを理解します。
インストール pandas
他のPythonパッケージと同様に、インストールできます pandas
と pip
.
まず、ローカルプログラミング環境またはサーバーベースのプログラミング環境を選択してインストールします。 pandas
そこでの依存関係とともに:
- pip install pandas numpy python-dateutil pytz
次のような出力が表示されます。
OutputSuccessfully installed pandas-0.19.2
インストールしたい場合 pandas
Anaconda 内では、次のコマンドを使用してこれを行うことができます。
- conda install pandas
この時点で、すべての準備が整いました。 pandas
パッケージ。
シリーズ
の pandas
、 Series は、任意のデータ型を保持できる1次元配列です。 軸ラベルはまとめてインデックスと呼ばれます。
次のように、コマンドラインでPythonインタープリターを起動しましょう。
- python
インタープリター内から、両方をインポートします numpy
と pandas
名前空間へのパッケージ:
- import numpy as np
- import pandas as pd
Seriesを使用する前に、一般的にどのように見えるかを見てみましょう。
s = pd.Series([data], index=[index])
データがPythonlistのように構造化されていることに気付くかもしれません。
インデックスを宣言せずに
整数データを入力してから、シリーズの名前パラメーターを指定しますが、 index
方法を確認するためのパラメータ pandas
暗黙的に入力します。
- s = pd.Series([0, 1, 4, 9, 16, 25], name='Squares')
それでは、シリーズを呼び出して、何がわかるかを見てみましょう。 pandas
それで行います:
- s
次の出力が表示されます。左側の列にインデックスがあり、右側の列にデータ値があります。 列の下には、シリーズの名前と値を構成するデータ型に関する情報があります。
Output0 0
1 1
2 4
3 9
4 16
5 25
Name: Squares, dtype: int64
配列のインデックスは提供していませんが、整数値が暗黙的に追加されています。 0
終えた 5
.
インデックスの宣言
上記の構文が示すように、明示的なインデックスを使用してSeriesを作成することもできます。 地球の海のメートル単位の平均深度に関するデータを使用します。
- avg_ocean_depth = pd.Series([1205, 3646, 3741, 4080, 3270], index=['Arctic', 'Atlantic', 'Indian', 'Pacific', 'Southern'])
シリーズが構築されたら、それを呼び出して出力を確認しましょう。
- avg_ocean_depth
OutputArctic 1205
Atlantic 3646
Indian 3741
Pacific 4080
Southern 3270
dtype: int64
提供したインデックスが左側にあり、値が右側にあることがわかります。
インデックス作成とスライスシリーズ
と pandas
値を取得するために、対応する番号でインデックスを付けることができるシリーズ:
- avg_ocean_depth[2]
Output3741
インデックス番号でスライスして値を取得することもできます。
- avg_ocean_depth[2:4]
OutputIndian 3741
Pacific 4080
dtype: int64
さらに、インデックスの値を呼び出して、それに対応する値を返すことができます。
- avg_ocean_depth['Indian']
Output3741
インデックスの値でスライスして、対応する値を返すこともできます。
- avg_ocean_depth['Indian':'Southern']
OutputIndian 3741
Pacific 4080
Southern 3270
dtype: int64
この最後の例では、インデックス名を使用してスライスする場合、2つのパラメーターが排他的ではなく包括的であることに注意してください。
Pythonインタープリターを終了しましょう quit()
.
辞書で初期化されたシリーズ
と pandas
dictionary データ型を使用して、シリーズを初期化することもできます。 このように、インデックスを個別のリストとして宣言するのではなく、組み込みのキーをインデックスとして使用します。
というファイルを作成しましょう ocean.py
そして、それを印刷するための呼び出しで次の辞書を追加します。
import numpy as np
import pandas as pd
avg_ocean_depth = pd.Series({
'Arctic': 1205,
'Atlantic': 3646,
'Indian': 3741,
'Pacific': 4080,
'Southern': 3270
})
print(avg_ocean_depth)
これで、コマンドラインでファイルを実行できます。
- python ocean.py
次の出力が表示されます。
OutputArctic 1205
Atlantic 3646
Indian 3741
Pacific 4080
Southern 3270
dtype: int64
シリーズは整理された方法で表示され、左側にインデックス(キーで構成)、右側に値のセットが表示されます。
これは、キーを呼び出すことで値にアクセスできるという点で、他のPython辞書と同じように動作します。これは、次のように行うことができます。
...
print(avg_ocean_depth['Indian'])
print(avg_ocean_depth['Atlantic':'Indian'])
Output3741
Atlantic 3646
Indian 3741
dtype: int64
ただし、これらのシリーズはPythonオブジェクトになっているため、辞書関数を使用できなくなります。
Python辞書は、シリーズを設定するための別のフォームを提供します pandas
.
DataFrames
DataFrames は、さまざまなデータ型で構成されている可能性のある列を持つ2次元のラベル付きデータ構造です。
DataFrameは、スプレッドシートまたはSQLテーブルに似ています。 一般的に、あなたが pandas
、DataFramesは、使用する最も一般的なオブジェクトになります。
どのように pandas
DataFrameは機能します。2つのシリーズを設定してから、それらをDataFrameに渡します。 最初のシリーズは私たちの avg_ocean_depth
以前からのシリーズ、そして私たちの2番目は max_ocean_depth
これには、地球上の各海の最大深度のデータがメートル単位で含まれています。
import numpy as np
import pandas as pd
avg_ocean_depth = pd.Series({
'Arctic': 1205,
'Atlantic': 3646,
'Indian': 3741,
'Pacific': 4080,
'Southern': 3270
})
max_ocean_depth = pd.Series({
'Arctic': 5567,
'Atlantic': 8486,
'Indian': 7906,
'Pacific': 10803,
'Southern': 7075
})
これらの2つのシリーズを設定したら、ファイルの下部、下にDataFrameを追加しましょう。 max_ocean_depth
シリーズ。 この例では、これらのシリーズの両方に同じインデックスラベルがありますが、異なるラベルのシリーズがある場合、欠落している値にはラベルが付けられます NaN
.
これは、シリーズの変数のキーとして宣言する列ラベルを含めることができるように構成されています。 DataFrameがどのように見えるかを確認するために、それを印刷するための呼び出しを発行してみましょう。
...
max_ocean_depth = pd.Series({
'Arctic': 5567,
'Atlantic': 8486,
'Indian': 7906,
'Pacific': 10803,
'Southern': 7075
})
ocean_depths = pd.DataFrame({
'Avg. Depth (m)': avg_ocean_depth,
'Max. Depth (m)': max_ocean_depth
})
print(ocean_depths)
Output Avg. Depth (m) Max. Depth (m)
Arctic 1205 5567
Atlantic 3646 8486
Indian 3741 7906
Pacific 4080 10803
Southern 3270 7075
出力には、2つの列見出しとそれぞれの下の数値データが表示され、辞書キーのラベルが左側にあります。
DataFramesでのデータの並べ替え
DataFrameのデータを並べ替えることができます。 DataFrame.sort_values(by=...)
関数。
たとえば、 ascending
ブールパラメータ。どちらでもかまいません。 True
また False
. ご了承ください ascending
は関数に渡すことができるパラメーターですが、降順はそうではありません。
...
print(ocean_depths.sort_values('Avg. Depth (m)', ascending=True))
Output Avg. Depth (m) Max. Depth (m)
Arctic 1205 5567
Southern 3270 7075
Atlantic 3646 8486
Indian 3741 7906
Pacific 4080 10803
これで、出力には、左端の整数列に低い値から高い値に昇順の数値が表示されます。
DataFramesを使用した統計分析
次に、いくつかの要約統計量から収集できるものを見てみましょう。 pandas
とともに DataFrame.describe()
関数。
特定のパラメータを渡さずに、 DataFrame.describe()
関数は、数値データ型について次の情報を提供します。
戻る | その意味 |
---|---|
count |
頻度カウント; 何かが発生する回数 |
mean |
平均または平均 |
std |
標準偏差、データがどの程度変化するかを示すために使用される数値 |
min |
セット内の最小数または最小数 |
25% |
25パーセンタイル |
50% |
50パーセンタイル |
75% |
75パーセンタイル |
max |
セット内の最大数または最大数 |
Pythonにこの統計データを出力させて、 ocean_depths
DataFrameと describe()
関数:
...
print(ocean_depths.describe())
このプログラムを実行すると、次の出力が表示されます。
Output Avg. Depth (m) Max. Depth (m)
count 5.000000 5.000000
mean 3188.400000 7967.400000
std 1145.671113 1928.188347
min 1205.000000 5567.000000
25% 3270.000000 7075.000000
50% 3646.000000 7906.000000
75% 3741.000000 8486.000000
max 4080.000000 10803.000000
これで、ここでの出力を元のDataFrameと比較して、グループと見なした場合の地球の海の平均深度と最大深度をより正確に把握できます。
欠落している値の処理
多くの場合、データを操作するときに、値が欠落します。 The pandas
パッケージは、欠落データを処理するためのさまざまな方法を提供します。 null
データ、または何らかの理由で存在しないデータ。 の pandas
、これはNAデータと呼ばれ、次のようにレンダリングされます。 NaN
.
欠落値の削除について説明します。 DataFrame.dropna()
関数と不足している値を埋める DataFrame.fillna()
関数。 これにより、開始時に問題が発生することがなくなります。
という新しいファイルを作りましょう user_data.py
値が欠落しているデータを入力して、DataFrameに変換します。
import numpy as np
import pandas as pd
user_data = {'first_name': ['Sammy', 'Jesse', np.nan, 'Jamie'],
'last_name': ['Shark', 'Octopus', np.nan, 'Mantis shrimp'],
'online': [True, np.nan, False, True],
'followers': [987, 432, 321, np.nan]}
df = pd.DataFrame(user_data, columns = ['first_name', 'last_name', 'online', 'followers'])
print(df)
printを呼び出すと、プログラムを実行すると次の出力が表示されます。
Output first_name last_name online followers
0 Sammy Shark True 987.0
1 Jesse Octopus NaN 432.0
2 NaN NaN False 321.0
3 Jamie Mantis shrimp True NaN
ここにはかなりの数の欠落している値があります。
まず、不足している値を次のように削除しましょう dropna()
.
...
df_drop_missing = df.dropna()
print(df_drop_missing)
小さなデータセットには値がまったく欠落していない行が1つしかないため、プログラムを実行したときにそのまま残る行はこれだけです。
Output first_name last_name online followers
0 Sammy Shark True 987.0
値を削除する代わりに、不足している値に次のような選択した値を入力することもできます。 0
. これは私たちが達成します DataFrame.fillna(0)
.
ファイルに追加した最後の2行を削除またはコメントアウトし、以下を追加します。
...
df_fill = df.fillna(0)
print(df_fill)
プログラムを実行すると、次の出力が表示されます。
Output first_name last_name online followers
0 Sammy Shark True 987.0
1 Jesse Octopus 0 432.0
2 0 0 False 321.0
3 Jamie Mantis shrimp True 0.0
これで、すべての列と行がそのままになり、 NaN
私たちの価値観として私たちは今持っています 0
それらのスペースを埋めます。 必要に応じてフロートが使用されていることに気付くでしょう。
この時点で、データの並べ替え、統計分析、およびDataFrameで欠落している値の処理を行うことができます。
結論
このチュートリアルでは、データ分析の概要情報について説明しました。 pandas
およびPython3。 あなたは今持っているはずです pandas
インストールされており、内のSeriesおよびDataFramesデータ構造を操作できます pandas
.