hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

pandasの使い方



1 はじめに

pandasとは、データ分析用ライブラリです。pandasで利用できるデータは、表計算ソフトExcelで扱うような表形式のデータです。pandasを使うと、Excelなどのファイルから表形式のデータを読み込み、集計、データ抽出、グラフの表示などが行えます。

2 検証環境

AlmaLinux版数は以下のとおりです。

[root@server ~]# cat /etc/redhat-release
AlmaLinux release 9.2 (Turquoise Kodkod)

カーネル版数は以下のとおりです。

[root@server ~]# uname -r
5.14.0-284.11.1.el9_2.x86_64

pythonの版数は以下のとおりです。

[root@server ~]# python -V
Python 3.9.16

3 事前準備

スシの名前、価格、注文数を記録したcsvファイルを作成します。なお、ikaの値段は意図的に空欄にしています。

[root@server ~]# cat sushi.csv
sushi,price,orders
ikura,500,2
aji,400,4
uni,700,2
toro,800,4
ika,,2
saba,200,2
kohada,200,2

4 csvファイルに対する操作

4.1 csvファイルを読み込む方法(read_csv)

csvファイルを読み込むためには、read_csvメソッドを使用します。read_csvメソッドの引数には、csvファイルのパスを指定します。

読み込んだファイル(sushi.csv)を表示するテストプログラムを作成します。なお、テストプログラム中のdfはDataFrameを表しています。Pandasには2つの主要なデータ構造があって、Series(シリーズ)が1次元のデータ、DataFrame(データフレーム)が2次元のデータに対応しています。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df)

テストプログラムを実行すると、sushi.csvの中身が表示されていることがわかります。

[root@server ~]# ./test.py
    sushi  price  orders
0   ikura  500.0       2
1     aji  400.0       4
2     uni  700.0       2
3    toro  800.0       4
4     ika    NaN       2
5    saba  200.0       2
6  kohada  200.0       2

4.2 csvファイルに書き込む方法(to_csv)

読み込んだファイル(sushi.csv)を/tmp直下に書き込むテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
df.to_csv('/tmp/sushi.csv')

テストプログラムを実行します。

[root@server ~]# ./test.py

/tmpにファイルが書き込まれたことがわかります。

[root@server ~]# cat /tmp/sushi.csv
,sushi,price,orders
0,ikura,500.0,2
1,aji,400.0,4
2,uni,700.0,2
3,toro,800.0,4
4,ika,,2
5,saba,200.0,2
6,kohada,200.0,2

次は、指定した列を/tmp直下のファイル(test.csv)に保存してみます。ここでは、sushi列のみをファイルに保存するテストぽプログラムを作成してみます。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
df.to_csv('/tmp/sushi.csv', columns=['sushi'])

テストプログラムを実行します。

[root@server ~]# ./test.py

テストプログラムを実行すると、sushi列がファイルに保存するされていることがわかります。

[root@server ~]# cat /tmp/sushi.csv
,sushi
0,ikura
1,aji
2,uni
3,toro
4,ika
5,saba
6,kohada

あと始末をします。

[root@server ~]# rm /tmp/sushi.csv

5 DataFrameの各種情報を取得する方法

5.1 DataFrameの要約情報を取得する方法(info)

infoメソッドは、DataFrameのデータ型やメモリ使用量などを表示するメソッドです。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df.info())

テストプログラムを実行すると、DataFrameのデータ型やメモリ使用量が表示されていることがわかります。

[root@server ~]# ./test.py
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7 entries, 0 to 6
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   sushi   7 non-null      object
 1   price   6 non-null      float64
 2   orders  7 non-null      int64
dtypes: float64(1), int64(1), object(1)
memory usage: 296.0+ bytes
None

5.2 DataFrameの行数を求める方法(len)

len はPythonの組み込み関数であり、DataFrameの行数を返します。この関数には、シーケンス(文字列、バイト列、タプル、リスト、rangeなど)またはコレクション(辞書、集合、凍結集合など)を引数として渡します。

DataFrameの行数を求めるテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(len(df))

テストプログラムを実行すると、DataFrameの行数が7行であることがわかります。

[root@server ~]# ./test.py
7

5.3 DataFrameの列名を取得する方法(columns)

columnsはDataFrame の属性です。columns属性は、DataFrame内の列名を含むリストを返します。

CSVファイルからデータを読み込み、DataFrame内の列名を表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df.columns)

テストプログラムを実行すると、列名を含むリストが表示されていることがわかります。

[root@server ~]# ./test.py
Index(['sushi', 'price', 'orders'], dtype='object')

次は、DataFrameのカラム数を求めるテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(len(df.columns))

テストプログラムを実行すると、DataFrameのカラム数が3であることがわかります。

[root@server ~]# ./test.py
3

5.4 行数・列数を取得する方法(shape)

shape はpandasのDataFrameの属性です。DataFrameのshape 属性は、行数と列数を含むタプルを返します。このタプルの最初の要素は行数(行の数)であり、2番目の要素は列数(列の数)です。

CSVファイルからデータを読み込み、そのデータの行数と列数を表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df.shape)
print(df.shape[0])
print(df.shape[1])

テストプログラムを実行すると、読み込んだファイルの行数と列数が表示されていることがわかります。

[root@server ~]# ./test.py
(7, 3)
7
3

6 DataFrameの行データを取得する方法

6.1 先頭から指定した行数を取り出す方法(head)

headはDataFrameの最初のいくつかの行を取得するたのメソッドです。headに引数を指定しないと、DataFrameの最初の5行を取得します。

DataFrameの先頭2行を表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df.head(2))

テストプログラムを実行すると、DataFrameの先頭2行が表示されていることがわかります。

[root@server ~]# ./test.py
   sushi  price  orders
0  ikura  500.0       2
1    aji  400.0       4

6.2 末尾から指定した行数を取り出す方法(tail)

headはDataFrameの最後のいくつかの行を取得するたのメソッドです。

DataFrameの末尾1行を表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df.tail(1))

テストプログラムを実行すると、DataFrameの末尾1行が表示されていることがわかります。

[root@server ~]# ./test.py
    sushi  price  orders
6  kohada  200.0       2

6.3 DataFrameの指定した行をまとめて取り出す方法(iloc)

DataFrameのindexが2から4までの行を取り出してみます。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df.iloc[2:4])

テストプログラムを実行すると、DataFrameの2行目から4行目までの行が表示されていることがわかります。

[root@server ~]# ./test.py
  sushi  price  orders
2   uni  700.0       2
3  toro  800.0       4

7 DataFrameの列データを取得する方法

DataFrameのsushi列を表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df['sushi'])

テストプログラムを実行すると、DataFrameのsushi列が表示されていることがわかります。

[root@server ~]# ./test.py
0     ikura
1       aji
2       uni
3      toro
4       ika
5      saba
6    kohada
Name: sushi, dtype: object

DataFrameのprice列を表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df['price'])

テストプログラムを実行すると、DataFrameのprice列が表示されていることがわかります。なお、ikaの価格は未設定なので、実行結果はNaNと表示されています。

[root@server ~]# ./test.py
0    500.0
1    400.0
2    700.0
3    800.0
4      NaN
5    200.0
6    200.0
Name: price, dtype: float64

8 DataFrameの基本統計量を取得する方法

8.1 列の最大値の取り出し方(max)

maxは、最大値を取得するSeriesの属性です。Seriesは、1次元のデータを表現するために使用するデータ構造です。

CSVファイルから寿司の価格データを読み込み、その価格(price列)の最大値を表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
series = df['price']
print(series.max())

テストプログラムを実行すると、価格の最大値は800円であることがわかります。

[root@server ~]# ./test.py
800.0

8.2 列の最小値の取り出し方(min)

minは、最小値を取得するSeriesの属性です。Seriesは、1次元のデータを表現するために使用するデータ構造です。

CSVファイルから寿司の価格データを読み込み、その価格(price列)の最小値を表示するテストプログラムを作成します。

200.0
[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
series = df['price']
print(series.min())

テストプログラムを実行すると、価格の最小値が200円であることがわかります。

[root@server ~]# ./test.py
200.0

8.3 平均値求める方法(mean)

meanは、平均値を取得するSeriesの属性です。Seriesは、1次元のデータを表現するために使用するデータ構造です。

CSVファイルから寿司の価格データを読み込み、その価格(preice列)の平均値を表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
series = df['price']
print(series.mean())

テストプログラムを実行すると、価格の平均値が467円であることがわかります。

[root@server ~]# ./test.py
466.6666666666667
[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
mean_price = (df['price']).mean()
mean_orders = (df['orders']).mean()

print("平均 price:", mean_price)
print("平均 orders:", mean_orders)
[root@server ~]# ./test.py
平均 price: 466.6666666666667
平均 orders: 2.5714285714285716

8.4 ユニークな値を調べる方法(unique)

uniqueは、Series内のユニークな値(重複のない値)を抽出するメソッドです。

CSVファイルから寿司の価格データを読み込み、ユニークな値を表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df.price.unique())

テストプログラムを実行すると、200円のスシはsabaとkohadaの2つありますが、1つにまとめられていることがわかります。

[root@server ~]# ./test.py
[500. 400. 700. 800.  nan 200.]

9 フィルタリングする方法

9.1 比較演算子で行を抽出する方法(query)

queryは条件を指定してDataFrameからデータを抽出するためのメソッドです。

price列が300円未満のスシを表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df.query('price < 300'))

テストプログラムを実行すると、300円未満のスシが表示されていることがわかります。

[root@server ~]# ./test.py
    sushi  price  orders
5    saba  200.0       2
6  kohada  200.0       2

次に、price列が400円以上のスシを表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df.query('not price < 400'))

テストプログラムを実行すると、400円以上のスシが表示されていることがわかります。

[root@server ~]# ./test.py
   sushi  price  orders
0  ikura  500.0       2
1    aji  400.0       4
2    uni  700.0       2
3   toro  800.0       4
4    ika    NaN       2

9.2 完全一致によるフィルタリング方法

sushi列がikuraの行を抽出するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
raw = (df.sushi == 'ikura')
print(df[raw])

テストプログラムを実行すると、ikuraの行が表示されていることがわかります。

[root@server ~]# ./test.py
   sushi  price  orders
0  ikura  500.0       2

price列が200円のスシを表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
raw = (df.price == 200)
print(df[raw])

テストプログラムを実行すると、price列が200円のスシが表示されていることがわかります。

[root@server ~]# ./test.py
    sushi  price  orders
5    saba  200.0       2
6  kohada  200.0       2

10 DataFrameをソートする方法

10.1 昇順にソートする方法

DataFrameのprice列を昇順にソートテストプログラムを作成します。デフォルトは昇順でソートします。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df.sort_values('price')

テストプログラムを実行すると、price列が昇順に表示されていることがわかります。

[root@server ~]# ./test.py
    sushi  price  orders
5    saba  200.0       2
6  kohada  200.0       2
1     aji  400.0       4
0   ikura  500.0       2
2     uni  700.0       2
3    toro  800.0       4
4     ika    NaN       2

10.2 降順にソートする方法

DataFrameの価格(price)を降順にソートするテストプログラムを作成します。ascending=Falseを指定すると、降順にソートすることができます

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df.sort_values('price', ascending=False))

テストプログラムを実行すると、価格が降順になっていることがわかります。

[root@server ~]# ./test.py
    sushi  price  orders
3    toro  800.0       4
2     uni  700.0       2
0   ikura  500.0       2
1     aji  400.0       4
5    saba  200.0       2
6  kohada  200.0       2
4     ika    NaN       2

次に、DataFrameのsushi列を降順に並べるテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df.sort_values('sushi', ascending=False))

テストプログラムを実行すると、sushi列がz->aの順で表示されていることがわかります。

[root@server ~]# ./test.py
    sushi  price  orders
2     uni  700.0       2
3    toro  800.0       4
5    saba  200.0       2
6  kohada  200.0       2
0   ikura  500.0       2
4     ika    NaN       2
1     aji  400.0       4

11 DataFrameの値を置換する方法(replace)

replaceはSeriesやDataFrame内の値を指定した値で置換するためのメソッドです。

DataFrameのsushi列のtoroをohtoroに置換するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df.replace('toro', 'ohtoro'))

テストプログラムを実行すると、toroがohtoroに置換されていることがわかります。

[root@server ~]# ./test.py
    sushi  price  orders
0   ikura  500.0       2
1     aji  400.0       4
2     uni  700.0       2
3  ohtoro  800.0       4
4     ika    NaN       2
5    saba  200.0       2
6  kohada  200.0       2

12 行列の名前を変更する方法(rename)

renameは、DataFrameの列名や行ラベルを変更するためのメソッドです。

12.1 列の名前を変更する方法

DataFrameの列名をpriceからkakakに変更するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
df_new = df.rename(columns={'price':'kakaku'})
print(df_new)

テストプログラムを実行すると、priceがkakakuに変更されたことがわかります。

[root@server ~]# ./test.py
    sushi  kakaku  orders
0   ikura   500.0       2
1     aji   400.0       4
2     uni   700.0       2
3    toro   800.0       4
4     ika     NaN       2
5    saba   200.0       2
6  kohada   200.0       2

次に、DataFrameの2つの列名、priceをkakaku、ordersをcyumonに変更してみます。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
df_new = df.rename(columns={'price':'kakaku','orders':'cyumon'})
print(df_new)

テストプログラムを実行すると、priceがkakaku、ordersがcyumonに変更されたことがわかります。

[root@server ~]# ./test.py
    sushi  kakaku  cyumon
0   ikura   500.0       2
1     aji   400.0       4
2     uni   700.0       2
3    toro   800.0       4
4     ika     NaN       2
5    saba   200.0       2
6  kohada   200.0       2

13 欠損値の扱い方

欠損値(NaN)の扱うメソッドに、isnull,dropna,fillna,notnullがあります。各メソッドについて動作確認をしてみます。

13.1 欠損値を判定する方法(isnull)

isnullは、各要素に対して判定を行い、欠損値(NaN)であればTrue、欠損値でなければFalseと判定します。

要素が欠損値ならTrue、欠損値でなければFalseを表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df.isnull())

テストプログラムを実行すると、ikaの価格は欠損しているため、Trueと表示されていることがわかります。

[root@server ~]# ./test.py
   sushi  price  orders
0  False  False   False
1  False  False   False
2  False  False   False
3  False  False   False
4  False   True   False
5  False  False   False
6  False  False   False

13.2 欠損値を削除する方法(dropna)

dropnaは、指定した条件に合致するデータ列に欠損値(NaN)が存在するかどうかをチェックし、条件を満たす場合にそのデータ列を削除するメソッドです。

欠損値(NaN)が存在するデータ列を削除するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
print(df.dropna())

テストプログラムを実行すると、欠損値が含まれるikaの行が削除されたことがわかります。

[root@server ~]# ./test.py
    sushi  price  orders
0   ikura  500.0       2
1     aji  400.0       4
2     uni  700.0       2
3    toro  800.0       4
5    saba  200.0       2
6  kohada  200.0       2

13.3 列の欠損値を補完する方法(fillna)

fillnaは欠損値を任意の値で穴埋めするメソッドです。ここでは、ikaの価格(欠損値)を平均値で補完してみます。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('sushi.csv')
series = df['price']
mean = series.mean()
filled = series.fillna(mean)
print(filled)

テストプログラムを実行すると、ikaの価格が平均値(466.666667)で補完されていることがわかります。

[root@server ~]# ./test.py
0    500.000000
1    400.000000
2    700.000000
3    800.000000
4    466.666667
5    200.000000
6    200.000000
Name: price, dtype: float64

14 日付に関する操作方法

テストプログラムが読み込みファイルを作成します。

[root@server ~]# cat date.csv
id,date,order
01,2021-08-01,3
02,2021-08-10,2
03,2021-09-10,1
04,2021-10-11,4
04,2021-10-20,5

14.1 object型からdatetime64型に変換する方法(to_datetime)

to_datetimeは日付と時刻のデータをdatetimeオブジェクトに変換するためのメソッドです。

date列の型を確認するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df=pd.read_csv('date.csv')
print(df.dtypes)

date列はobject型であることがわかります。

[root@server ~]# ./test.py
id        int64
date     object
order     int64
dtype: object

次に、object型からdatetime64型に変換してみます。datetime64型に変換することで、例えば年だけを取得したい、月だけを取得したいということができます

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('date.csv')
df["date"] = pd.to_datetime(df["date"])
print(df.dtypes)

date列がobject型からdatetime64型に変換されたことがわかります。

[root@server ~]# ./test.py
id                int64
date     datetime64[ns]
order             int64
dtype: object

14.2 列を任意のフォーマットに一括変換する方法(strftime)

dt.strftimeは、列を任意のフォーマットの文字列に一括変換する関数です。%mで月のフォーマットを指定しています。年月の場合は%Y%mと指定します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df=pd.read_csv('date.csv')
df['date']=pd.to_datetime(df['date'])
df['month']=df['date'].dt.strftime('%m')
print(df)

年月日から月に変換されたmonth列が追加されたことがわかります。

[root@server ~]# ./test.py
   id       date  order month
0   1 2021-08-01      3    08
1   2 2021-08-10      2    08
2   3 2021-09-10      1    09
3   4 2021-10-11      4    10
4   4 2021-10-20      5    10

14.3 グルーピングする方法(groupby)

データをグルーピングして、グループごとにデータを集約して、それぞれの合計/最大/最小等の統計量を算出したりすることができます。

まず、注文数について、月単位の合計数を求めてみます。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df = pd.read_csv('date.csv')
df['date'] = pd.to_datetime(df['date'])
df['month'] = df['date'].dt.strftime('%Y-%m')

monthly_orders = df.groupby('month')['order'].sum()

print(monthly_orders)

注文数が、8月は5、9月は1、10月は9であることがわかります。

[root@server ~]# ./test.py
month
2021-08    5
2021-09    1
2021-10    9
Name: order, dtype: int64

次に、各月の一番多い注文数を求めるテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

df=pd.read_csv('date.csv')
df['date']=pd.to_datetime(df['date'])
df['month']=df['date'].dt.strftime('%m')
print(df.groupby('month').max()['order'])

各月の注文の最大数は、8月は3、9月は1、10月は5であることがわかります。

[root@server ~]# ./test.py
month
08    3
09    1
10    5
Name: order, dtype: int64

15 DataFrameを結合する方法(merge)

mergeはpandasライブラリのデータ結合操作を行うためのメソッドです。mergeメソッドを使用することで、異なるDataFrameオブジェクトのデータを共通のキー(列)に基づいて結合し、新しいDataFrameを生成できます。

名前と国語の点数を記録したkokugo.csvを作成します。

[root@server ~]# cat kokugo.csv
name,kokugo
kato,70
suzuki,80
tanaka,60

名前と算数の点数を記録したsansu.csvを作成します。

[root@server ~]# cat sansu.csv
name,sansu
kato,50
suzuki,70
tanaka,90

kokugo.csvとsansu.csvを結合するテストプログラムを作成します。共通する列をonに指定することで、紐づく値を軸に結合することができます。howでkokugoとsansuのどちらを主軸にするかを指定します。今回は、kokugoにsansuを結合するので、how='left'と指定します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd

kokugo = pd.read_csv('kokugo.csv')
sansu = pd.read_csv('sansu.csv')
print(pd.merge(kokugo,sansu, on='name', how='left'))

kokugo.csvとsansu.csvに共通のキー(nama)で結合されていることがわかります。

[root@server ~]# ./test.py
     name  kokugo  sansu
0    kato      70     50
1  suzuki      80     70
2  tanaka      60     90

16 その他

16.1 複数ファイルを読み込む方法

テストプログラムが読み込むファイルを作成します。

[root@server ~]# cat data1.csv
name,age
suzuki,40
kato,50

テストプログラムが読み込むファイルを作成します。

[root@server ~]# cat data2.csv
name,age
tanaka,30
itakahashi,20

テストプログラムを作成します。
globはPythonの組み込みライブラリです。指定したパターンに一致するファイルやディレクトリのリストを取得するために使用します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd
import glob

all_files=glob.glob('/root/data[0-9].csv')

li = []
for filename in all_files:
  df = pd.read_csv(filename, delimiter=",")
  li.append(df)
frame = pd.concat(li, ignore_index=True)
print(frame)

テストプログラムを実行すると、

[root@server ~]# ./test.py
         name  age
0      tanaka   30
1  itakahashi   20
2      suzuki   40
3        kato   50

Z 参考情報

私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ

記事作成に参考にした書籍です。

サンプルコードが短く、分かりやすいです。

Pythonコードレシピ集(Kindle版)

Pythonコードレシピ集(単行本)

  • スッキリわかるPython入門 (スッキリわかる入門シリーズ)

簡潔な説明で分かりやすいです。

スッキリわかるPython入門 (スッキリわかる入門シリーズ)(単行本)

スッキリわかるPython入門 (スッキリわかるシリーズ)(Kindle版)