pandasのDataFrame型におけるデータ読み込み/定義/初期化の方法として、read_csvやread_tableなどを使った方法を記載する。また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
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
リスト型・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