Python Pandasチュートリアル:データフレーム、日付範囲、および使用法

⚡ スマートサマリー

Pandasはオープンソースです Python 表形式データを操作するためのライブラリです。SeriesおよびDataFrame構造、日付範囲、検査ヘルパー、そしてこのチュートリアル全体を通して説明されているスライス、削除、連結、ソート、名前変更などの操作を提供します。

  • 🔘 NumPy 上に構築: PandasはNumPyを必要とします。NumPyは、すべてのSeriesとDataFrameの背後にある配列を提供します。
  • ☑️ 2つの構造物: Seriesにはラベル付きの次元が1つ格納されます。DataFrameには、様々な型の行と列が格納されます。
  • 日付範囲: pd.date_range() は、開始日、期間数、頻度からインデックスを作成します。
  • 🧪 まず点検してください: head()、tail()、describe() は、分析を行う前に、形状、ばらつき、パーセンタイルを明らかにします。
  • 🛠️ 正確にスライスする: 括弧名で列を選択し、locでラベルを選択し、ilocで位置を選択します。
  • ⚠️ バージョンノート: 周波数エイリアスMはPandas 2.2以降非推奨です。最新リリースではMEが推奨されています。

Python Pandasチュートリアル:データフレーム、日付範囲、およびPandasの使用方法

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は価格値です。

データフレームは、統計学者やその他のデータ実務者にとってよく知られたものです。下の図は、その形状を示しています。側面にはラベル付きの行インデックスがあり、上部には名前付きの列が並んでいます。

ラベル付き行インデックスと名前付き列を持つ Pandas DataFrame のレイアウト

シリーズとは何ですか?

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]

よくあるご質問

コー​​ル pd.read_csv() パスまたは URL列にラベルを付けるには名前を追加し、区切り文字を変更するには sep を使用し、必要な列だけを残すには usecols を使用します。

isnull() は該当行または列にフラグを立て、dropna() は該当する行または列を削除し、fillna() は定数または列平均などの統計値を代入します。欠損値は NaN と表示されます。

groupby() 関数は、キー列に基づいて行をグループに分割し、各グループに対してカウント、合計、平均などの集計を適用し、その結果を新しいフレームに結合します。

ブールマスクを作成し、それを括弧で囲んで渡します。例: df[df.Age == 30]。マスクはアンパサンド演算子とパイプ演算子で組み合わせ、ラップします。ping 各比較は括弧内に示す。

pd.merge() はキー列に基づいて行を照合します。 SQL join は、inner、left、right、outer のいずれかに設定して機能します。concat() は、一致するキーではなくフレームを積み重ねます。

df.to_csv('out.csv', index=False) はカンマ区切りのファイルを書き込み、df.to_excel('out.xlsx') はワークシートを書き込みます。ping インデックスにより、次回の読み取り時に名前のない最初の列が生成されることが回避されます。

AIアシスタントは新しいフレームをプロファイリングし、実行すべきdescribe、groupby、plot呼び出しを提案し、データ型が特殊であったり、null値が多い列にフラグを立てます。提案内容はすべて生データと照合して確認してください。

Yes. GitHubコパイロット プレーンなコメントを動作する Pandas コードに完成させます Jupyter セル。 Rev結果を信頼する前に、データ型と行数を確認してください。