【超高速Pandas入門】データ読み込み(定義、初期化)

ここでは、DataFrame型の定義(初期化)の方法を説明する。またpandasを使う上では、個人的に列名を指定することが多いため、列名の簡単な指定方法を説明する。

Udemy >> 現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

この記事を読んでわかること

  • テキストファイル(csv, tsv etc)からDataFrame型へ定義できること
  • リスト型やNumpy型からDataFrame型へ定義できること
  • 列名の指定ができること

まとめ

# DataFrame型を定義(初期化)する
## ヘッダーがあるcsvファイルから
pd.read_csv("csvファイルのパス")

## ヘッダーがないcsvファイルから
pd.read_csv("csvファイルのパス", header=None)

## ヘッダーがあるtsvファイルから
pd.read_table("tsvファイルのパス")

## ヘッダーがないtsvファイルから
pd.read_table("tsvファイルのパス", header=None)

## テキストファイル(任意の区切り文字)から
pd.read_csv("テキストファイルのパス", delimiter="任意の区切り文字")
pd.read_csv("テキストファイルのパス", sep="任意の区切り文字")
(read_tableでも同様)

## リスト型・Numpy型から
pd.DataFrame(リスト型)
pd.DataFrame(Numpy型)

# 列名を定義する
## namesオプション
pd.read_csv("テキストファイルのパス", names=[列名1,列名2,...])
pd.read_table("テキストファイルのパス", names=[列名1,列名2,...])

## columnsオプション
pd.DataFrame(イテレーション可能なオブジェクト,columns=[列名1,列名2,...])
※イテレーション可能なオブジェクト:リスト型、Numpy型を含む

## columns属性
DataFrame型.columns = [列名1,列名2,...]

特定の値で定義(初期化)する

csvファイルから

read_csvメソッドを使用する。デフォルトだと一行目をヘッダーとして読み込むため、ヘッダーがないファイルの場合、header=Noneが必要。

# 書き方
# ヘッダーがあるcsvファイルの場合
pd.read_csv("csvファイルのパス")

# ヘッダーがないcsvファイルの場合
pd.read_csv("csvファイルのパス", header=None)

以下のようなデータを想定。一行目にヘッダーが存在するため、パスの指定のみでOK。

id,product,price
1,apple,100
2,orange,30
3,lemon,50
# サンプル
import pandas as pd

df_csv = pd.read_csv("data.csv")
print(df_csv)

# 出力
#    id product  price
# 0   1   apple    100
# 1   2  orange     30
# 2   3   lemon     50

Udemy >> Streamlit, Pandas, Pythonで学ぶ!データ分析の基礎とインタラクティブダッシュボード作成入門

tsvファイルから

# 書き方
# ヘッダーがあるtsvファイルの場合
pd.read_table("tsvファイルのパス")

# ヘッダーがないtsvファイルの場合
pd.read_table("tsvファイルのパス", header=None)

tsvファイルは以下のようなタブ区切りのテキストファイルである。

id    product    price
1    apple    100
2    orange    30
3    lemon    50
# サンプル
import pandas as pd

df_tsv = pd.read_table("data.tsv")
print(df_tsv)

# 出力
#    id product  price
# 0   1   apple    100
# 1   2  orange     30
# 2   3   lemon     50

テキストファイル(任意の区切り文字)から

実はカンマやタブとは別の区切り文字でもdelimiterを指定することで同じメソッドで読み込むことができる。

# 書き方
pd.read_csv("テキストファイルのパス", delimiter="任意の区切り文字")
pd.read_csv("テキストファイルのパス", sep="任意の区切り文字")
(read_tableでも同様)

例えば以下のようにセミコロン(;)区切りのデータでもdelimiterにセミコロン(;)を指定すれば、区切り文字として扱うことができる。

id;product;price
1;apple;100
2;orange;30
3;lemon;50
# サンプル
import pandas as pd

df_txt = pd.read_csv("data.txt", delimiter=";")
print(df_txt)

# 出力
#    id product  price
# 0   1   apple    100
# 1   2  orange     30
# 2   3   lemon     50

Udemy >> 【世界で37万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜

リスト型・Numpy型から

リスト型とNumpy型は、そのまま指定するだけで変換できる。

# 書き方
pd.DataFrame(リスト型)
pd.DataFrame(Numpy型)
# サンプル
import pandas as pd
import numpy as np

list_data = [[1, 'apple', 100],[2, 'orange', 30],[3, 'lemon', 50]] 
df_list = pd.DataFrame(list_data)
print(df_list)

# 出力
#    0       1    2
# 0  1   apple  100
# 1  2  orange   30
# 2  3   lemon   50

np_data = np.array([[1, 'apple', 100],[2, 'orange', 30],[3, 'lemon', 50]])
df_np = pd.DataFrame(np_data)
print(df_np)

# 出力
#    0       1    2
# 0  1   apple  100
# 1  2  orange   30
# 2  3   lemon   50

特定の列名で定義(初期化)する

特定の列名を付与したい場合は、いくつか方法があるがここでは3つ説明する。

namesオプションで

read_csv, read_tableでnamesオプションを使うと列名を指定できる。

# 書き方
pd.read_csv("テキストファイルのパス", names=[列名1,列名2,...])
pd.read_table("テキストファイルのパス", names=[列名1,列名2,...])

以下のようなヘッダーのないファイルを読み込む際に使える。ヘッダーがあるものを読み込んだ場合は、namesで指定した列名に上書きされる。

1,apple,100
2,orange,30
3,lemon,50
# サンプル
import pandas as pd

df_csv = pd.read_csv("data_noHeader.csv", names=["id","product","price"])
print(df_csv)

# 出力
#    id product  price
# 0   1   apple    100
# 1   2  orange     30
# 2   3   lemon     50

columnsオプションで

DataFrame定義のcolumnsオプションで列名を定義できる。

# 書き方
pd.DataFrame(イテレーション可能なオブジェクト,columns=[列名1,列名2,...])
※イテレーション可能なオブジェクト:リスト型、Numpy型を含む

# サンプル
import pandas as pd

list_data = [[1, 'apple', 100],[2, 'orange', 30],[3, 'lemon', 50]] 
df_list = pd.DataFrame(list_data, columns=["id","product","price"])
print(df_list)

# 出力
#    id product  price
# 0   1   apple    100
# 1   2  orange     30
# 2   3   lemon     50

columns属性で

DataFrame型を定義した後に列名を変更したい場合、columns属性にリスト型で値をセットすれば良い。

# 書き方
DataFrame型.columns = [列名1,列名2,...]

# サンプル
import pandas as pd

list_data = [[1, 'apple', 100],[2, 'orange', 30],[3, 'lemon', 50]] 
df_list = pd.DataFrame(list_data)
print(df_list)

# 出力(セット前)
#    0       1    2
# 0  1   apple  100
# 1  2  orange   30
# 2  3   lemon   50

df_list.columns=["id","product","price"]
print(df_list)

# 出力(セット後)
#    id product  price
# 0   1   apple    100
# 1   2  orange     30
# 2   3   lemon     50