csvファイルの読み込み

pandasでCSVファイルを読み込むには、read_csv()関数を使います。次のように、第1引数に読み込みたいファイルのパスを指定します。

df = pd.read_csv(ファイルパス)

read_csv()にはたくさんのオプションがありますが、デフォルトでは次のように動作します。

  1. ファイルの1行目を、列名一覧として読み込む
  2. インデックスは、0始まりの通し番号を自動で割り振る
  3. 半角カンマ(,)を区切り文字として認識する
https://images.pyq.jp/repo/prod/pandas_io_read_csv/read_csv_default.jpg

read_csv()にはたくさんのオプションがあります。たとえば、インデックスとなる列を明示的に指定する場合は、引数index_colで列名を指定します。

# インデックスにする列名を指定して読み込み
df = pd.read_csv(ファイルパス, index_col=インデックスにする列名)

たとえば、下図のように列番号を指定すると、列番号がインデックスとして設定されます。

https://images.pyq.jp/repo/prod/pandas_io_read_csv/read_csv_index_col.jpg

演習

さっそく、pandasで読み込みましょう。pandasでCSVファイルを読み込むには、 read_csv()を使います。read_csv()ではさまざまなオプションを引数で指定できますが、まずはデフォルトの設定で読み込んでみましょう。

import pandas as pd

# CSVファイルの読み込み(デフォルト)
df_default = pd.read_csv("dataset/physical_measurement.csv")

読み込んだ結果を確認しましょう。read_csv()は、デフォルトでは1行目を列名一覧として読み込みます。また、インデックスは0から始まる通し番号を自動で割り当てます。

df_default
StudentIDNameHeightWeight
01001佐藤17253
11002田中16050
21003鈴木16558
31004高橋17059

read_csv()では、さまざまなオプションが用意されています。たとえば、引数index_colで列名を指定すると、指定した列がインデックスとして読み込まれます。

今回は、列StudentIDを指定して実行してみましょう。実行すると、インデックス名が”StudentID”になり、インデックスも1001100210031004 に変わっていることがわかります。

# 列StudentIDをインデックスに指定して読み込み
df_with_index = pd.read_csv("dataset/physical_measurement.csv", index_col="StudentID")
df_with_index
NameHeightWeight
StudentID
1001佐藤17253
1002田中16050
1003鈴木16558
1004高橋17059

演習2

import pandas as pd

df = pd.read_csv(
    "dataset/exercise_2.txt", index_col="学生番号", sep=" ", encoding="shift_jis"
)
df
名前身長体重
学生番号
1001佐藤17253
1002田中16050
101伊藤16654
102山本15651

今回の問題では、列学生番号をインデックスとして指定して読み込みました。
しかし、型を指定していないので整数として読み込まれてしまい、0101が「文字列の"0101"」ではなく「整数の101」になってしまっています。

列の場合は引数dtypeで型を指定できますが、インデックスの型を指定するオプションはありません
そのため、インデックスの型を明示的に指定したい場合は、次のステップを踏む必要があります。

  1. 列のまま、引数dtypeで型を指定して読み込む
  2. その後、set_index()を使って列からインデックスに変換する
# 型を指定して読み込み
df = pd.read_csv(
    "dataset/exercise_2.csv", sep=" ", encoding="shift_jis", dtype={"学生番号": str}
)
# 列「学生番号」をインデックスに変換
df = df.set_index("学生番号")
学生番号名前身長体重
1001佐藤17253
1002田中16050
0101伊藤16654
0102山本15651

コメント

タイトルとURLをコピーしました