Python Pandasチュートリアル:データフレーム、日付範囲、および使用法
⚡ スマートサマリー
Pandasはオープンソースです Python 表形式データを操作するためのライブラリです。SeriesおよびDataFrame構造、日付範囲、検査ヘルパー、そしてこのチュートリアル全体を通して説明されているスライス、削除、連結、ソート、名前変更などの操作を提供します。
Pandasとは何ですか Python?
パンダ は、データ操作と分析を実行できるオープンソースライブラリです。 Python数値表と時系列の両方をカバーします。データの作成、操作、整理を簡単に行う方法を提供し、 NumPyそのため、Pandasが動作するにはNumPyが存在している必要があります。
なぜパンダを使うのか?
データサイエンティストはPandasを次のように活用しています Python 以下の利点があります:
- 欠落データを簡単に処理
- 一次元データにはSeriesを、多次元データにはDataFrameを使用します。
- データをスライスする効率的な方法を提供します
- データをマージ、連結、または再形成する柔軟な方法を提供します。
- 強力な時系列分析ツールキットが含まれています
要するに、Pandasは強力で使いやすいデータ構造と、それらを迅速に操作する手段を提供するため、ほとんどのデータベースで中心的な役割を果たしているのです。 Python データ分析 作業。
Pandasのインストール方法
Pandas は Anaconda およびほとんどのマネージドノートブックサービスに同梱されているため、通常は既にインストールされています。インポートが失敗した場合は、以下のコマンドのいずれかで追加できます。 TensorFlow のインストール方法 Pandasも含まれています。
- ピップ:
pip install pandas - アナコンダ:
conda install -c anaconda pandas - 中 Jupyter Notebook モバイル:
import sys !conda install --yes --prefix {sys.prefix} pandas
パンダのデータフレームとは何ですか?
Pandas DataFrame は、列に異なる型を格納できる 2 次元のラベル付きデータ構造です。これは、データを表形式で格納する標準的な方法です。行には観測値が格納され、列には情報の名前が付けられます。たとえば、 ブランド は列名、2、3、4は価格値です。
データフレームは、統計学者やその他のデータ実務者にとってよく知られたものです。下の図は、その形状を示しています。側面にはラベル付きの行インデックスがあり、上部には名前付きの列が並んでいます。
シリーズとは何ですか?
Seriesは1次元データ構造です。整数、浮動小数点数、文字列など、あらゆるデータ型を保持でき、計算を実行したり、1次元配列を返したりする場合に役立ちます。Seriesは定義上、複数の列を持つことはできません。複数の列を持つ場合は、DataFrame構造を使用してください。
Pandas Seriesのコンストラクタは、以下のパラメータを受け取ります。
- 日付: リスト、辞書、またはスカラー値を指定できます。
pd.Series([1., 2., 3.])
0 1.0 1 2.0 2 3.0 dtype: float64
インデックスを追加するには index行に名前を付け、その長さは列のサイズと等しくなければなりません。
pd.Series([1., 2., 3.], index=['a', 'b', 'c'])
以下では、3行目に欠損値があるPandas Seriesを作成します。 Python 次のように表示されます NaN, np.nan NumPyから人工的に1つを作成します。
pd.Series([1,2,np.nan])
出力
0 1.0 1 2.0 2 NaN dtype: float64
パンダのデータフレームを作成する
NumPy配列をDataFrameに変換するには、 pd.DataFrame()逆も可能です。DataFrame を配列に戻すには、 np.array()または df.to_numpy()これは、現在のPandasのドキュメントで推奨されている方法です。
## Numpy to pandas import numpy as np h = [[1,2],[3,4]] df_h = pd.DataFrame(h) print('Data Frame:', df_h) ## Pandas to numpy df_h_n = np.array(df_h) print('Numpy array:', df_h_n) Data Frame: 0 1 0 1 2 1 3 4 Numpy array: [[1 2] [3 4]]
辞書は入力として同様に機能します pd.DataFrame().
dic = {'Name': ["John", "Smith"], 'Age': [30, 40]}
pd.DataFrame(data=dic)
| 年数 | 名前 | |
|---|---|---|
| 0 | 30 | John Redfern |
| 1 | 40 | Smith |
パンダの範囲データ
Pandasには、時系列のインデックスとなる日付範囲を作成するための便利なAPIが用意されています。呼び出しは次の形式になります。
pd.date_range(start, periods, freq):
- 最初のパラメータは開始日です
- XNUMX 番目のパラメータは期間の数です (終了日が指定されている場合はオプション)
- 最後のパラメータは頻度です:日
D、 月Mと年Y
## Create date # Days dates_d = pd.date_range('20300101', periods=6, freq='D') print('Day:', dates_d)
出力
Day: DatetimeIndex(['2030-01-01', '2030-01-02', '2030-01-03', '2030-01-04', '2030-01-05', '2030-01-06'], dtype='datetime64[ns]', freq='D')
# Months dates_m = pd.date_range('20300101', periods=6, freq='M') print('Month:', dates_m)
出力
Month: DatetimeIndex(['2030-01-31', '2030-02-28', '2030-03-31', '2030-04-30','2030-05-31', '2030-06-30'], dtype='datetime64[ns]', freq='M')
バージョンノート: 月の別名 M 上記で使用されている方法は、Pandas 2.2 で非推奨となり、Pandas 3.0 で削除されました。現在のリリースでは、 freq='ME' 月末時点の場合、結果として得られる指数は同じです。
データの検査
データセットの先頭または末尾は、 head() or tail() 以下の Pandas の例に示すように、DataFrame に対して呼び出されます。
ステップ1) NumPyを使ってランダムな数列を作成します。この数列は4列6行です。
random = np.random.randn(6,4)
ステップ2) 次に、Pandasを使ってデータフレームを作成します。
dates_m インデックスとして、各行には日付に対応する名前が付けられ、4 つの列には columns 引数。
# Create data with date df = pd.DataFrame(random, index=dates_m, columns=list('ABCD'))
なぜなら np.random.randn() シードなしで実行すると、ここに印刷されている数値と異なる数値が表示されます。 np.random.seed(0) まず、固定セットを再現したい場合。
ステップ3) ヘッド機能を使用する
df.head(3)
| A | B | C | D | |
|---|---|---|---|---|
| 2030-01-31 | 1.139433 | 1.318510 | -0.181334 | 1.615822 |
| 2030-02-28 | -0.081995 | -0.063582 | 0.857751 | -0.527374 |
| 2030-03-31 | -0.519179 | 0.080984 | -1.454334 | 1.314947 |
ステップ4) tail関数を使用する
df.tail(3)
| A | B | C | D | |
|---|---|---|---|---|
| 2030-04-30 | -0.685448 | -0.011736 | 0.622172 | 0.104993 |
| 2030-05-31 | -0.935888 | -0.731787 | -0.558729 | 0.768774 |
| 2030-06-30 | 1.096981 | 0.949180 | -0.196901 | -0.471556 |
ステップ5) データに関するヒントを得るための優れた方法は describe()データセットの件数、平均値、標準偏差、最小値、最大値、およびパーセンタイルを報告します。
df.describe()
| A | B | C | D | |
|---|---|---|---|---|
| カウント | 6.000000 | 6.000000 | 6.000000 | 6.000000 |
| 意味する | 0.002317 | 0.256928 | -0.151896 | 0.467601 |
| STD | 0.908145 | 0.746939 | 0.834664 | 0.908910 |
| 分 | -0.935888 | -0.731787 | -1.454334 | -0.527374 |
| 25% | -0.643880 | -0.050621 | -0.468272 | -0.327419 |
| 50% | -0.300587 | 0.034624 | -0.189118 | 0.436883 |
| 75% | 0.802237 | 0.732131 | 0.421296 | 1.178404 |
| マックス | 1.139433 | 1.318510 | 0.857751 | 1.615822 |
スライスデータ
スライスは、データフレームから行または列のサブセットを抽出します。列名を使用して、trac以下の Pandas の例に示すように、1 つの列にまとめます。
## Slice ### Using name df['A'] 2030-01-31 -0.168655 2030-02-28 0.689585 2030-03-31 0.767534 2030-04-30 0.557299 2030-05-31 -1.547836 2030-06-30 0.511551 Freq: M, Name: A, dtype: float64
複数の列を選択するには、二重括弧が必要です。 [[..,..]]最初のペアは列を選択することを意味し、2番目のペアはどの列を返すかを指定します。
df[['A', 'B']]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
コロンを使って行を分割できます。以下のコードは最初の3行を返します。
### using a slice for row
df[0:3]
| A | B | C | D | |
|---|---|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 | 0.572301 | -0.031827 |
| 2030-02-28 | 0.689585 | 0.998266 | 1.164690 | 0.475975 |
| 2030-03-31 | 0.767534 | -0.940617 | 0.227255 | -0.341532 |
その loc アクセサは列を名前で選択します。通常どおり、カンマの前の値は行を、カンマの後の値は列を表します。複数の列を選択するには角括弧が必要です。
## Multi col df.loc[:,['A','B']]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
複数の行と列を選択する別の方法もあります。 iloc[] 列名の代わりに整数位置を使用するため、以下のコードは上記と同じ DataFrame を返します。
df.iloc[:, :2]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
列を削除する
列を削除するには df.drop()名前を渡す columns 引数。
df.drop(columns=['A', 'C'])
| B | D | |
|---|---|---|
| 2030-01-31 | 0.587590 | -0.031827 |
| 2030-02-28 | 0.998266 | 0.475975 |
| 2030-03-31 | -0.940617 | -0.341532 |
| 2030-04-30 | 0.507350 | -0.296035 |
| 2030-05-31 | 1.276558 | 0.523017 |
| 2030-06-30 | 1.572085 | -0.594772 |
連結
2 つの DataFrame を連結するには、 pd.concat()まず、2つのフレームを作成します。
import numpy as np df1 = pd.DataFrame({'name': ['John', 'Smith','Paul'], 'Age': ['25', '30', '50']}, index=[0, 1, 2]) df2 = pd.DataFrame({'name': ['Adam', 'Smith' ], 'Age': ['26', '11']}, index=[3, 4])
次に、それらを連結します。
df_concat = pd.concat([df1,df2]) df_concat
| 年数 | 名 | |
|---|---|---|
| 0 | 25 | John Redfern |
| 1 | 30 | Smith |
| 2 | 50 | Paul Cairns |
| 3 | 26 | アダム |
| 4 | 11 | Smith |
重複を削除
データセットに重複情報が含まれている場合、 drop_duplicates() 重複する行を除外する簡単な方法です。 df_concat 重複した観測値を保持しています: Smith 2回登場 name コラム。
df_concat.drop_duplicates('name')
| 年数 | 名 | |
|---|---|---|
| 0 | 25 | John Redfern |
| 1 | 30 | Smith |
| 2 | 50 | Paul Cairns |
| 3 | 26 | アダム |
値の並べ替え
フレームをソートするには sort_values()。 ご了承ください Age ここではテキストとして作成されたため、行は文字列の順にソートされます。
df_concat.sort_values('Age')
| 年数 | 名 | |
|---|---|---|
| 4 | 11 | Smith |
| 0 | 25 | John Redfern |
| 3 | 26 | アダム |
| 1 | 30 | Smith |
| 2 | 50 | Paul Cairns |
列名の変更
rename() Pandasで列名を変更するには、以下のコードを使用します。各ペアにおいて、最初の値は現在の列名、2番目の値は新しい列名です。
df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
| 年齢_ppl | 姓 | |
|---|---|---|
| 0 | 25 | John Redfern |
| 1 | 30 | Smith |
| 2 | 50 | Paul Cairns |
| 3 | 26 | アダム |
| 4 | 11 | Smith |
Pandasメソッドのクイックリファレンス
この表は、一般的なタスクそれぞれに、それを実行するPandasメソッドを対応付けたものです。
| 仕事 | 方法 |
|---|---|
| データをインポートする | read_csv |
| シリーズを作成する | シリーズ |
| データフレームの作成 | データフレーム |
| 日付範囲の作成 | 日付範囲 |
| リターンヘッド | |
| リターンテール | tail |
| 説明する | 説明する |
| 名前を使用してスライスする | データ名['列名'] |
| 行を使用してスライスする | データ名[0:5] |

