[python]CSVファイル読み込み(行指定、列指定(numpy、pandas))

はじめに

CSVファイルは、データ分析や機械学習などの分野でよく使われます。Pythonには、CSVファイルを読み込むためのライブラリとして、numpyとpandasがあります。本記事では、numpyとpandasを使ったCSVファイルの列指定による読み込み方法と、行指定による読み込み方法について解説します。

numpyを使ったCSVファイルの列指定による読み込み

numpyを使ったCSVファイルの読み込みは、以下のように行います。

import numpy as np
# CSVファイルの読み込み
data = np.loadtxt('example.csv', delimiter=',', skiprows=1, usecols=(0,2,4))
print(data)

ここでは、delimiterで区切り文字を指定し、skiprowsで読み込みをスキップする行数を指定し、usecolsで読み込む列を指定しています。上記の例では、1行目をスキップして、0列目、2列目、4列目を読み込んでいます。

また、CSVファイルのデータ型が異なる場合は、dtypeオプションでデータ型を指定することもできます。

import numpy as np
# CSVファイルの読み込み
data = np.loadtxt('example.csv', delimiter=',', skiprows=1, usecols=(0,2,4), dtype={'names': ('name', 'age', 'gender'), 'formats': ('S10', 'i4', 'S10')})
print(data)

ここでは、dtypeオプションで、name列を文字列型、age列を整数型、gender列を文字列型として読み込んでいます。

pandasを使ったCSVファイルの列指定による読み込み

pandasを使ったCSVファイルの読み込みは、以下のように行います。

import pandas as pd
# CSVファイルの読み込み
df = pd.read_csv('example.csv', usecols=[0,2,4])
print(df)

ここでは、usecolsで読み込む列を指定しています。上記の例では、0列目、2列目、4列目を読み込んでいます。

pandasを使ったCSVファイルの読み込みは、numpyよりも高機能であり、列名や欠損値の処理なども簡単に行うことができます。

numpyとpandasの列指定読み込みの違いと使い分け

numpyとpandasの列指定読み込みの違いは、以下の通りです。

  • numpyは、データ型が同じ場合に高速に読み込むことができますが、列名や欠損値の処理が煩雑です。
  • pandasは、列名や欠損値の処理が簡単で、高機能ですが、numpyよりも遅い場合があります。

使い分けとしては、データ型が同じ場合はnumpyを、列名や欠損値の処理が必要な場合はpandasを使うと良いでしょう。

CSVファイルの行指定による読み込み

CSVファイルの行指定による読み込みは、以下のように行います。

import pandas as pd
# CSVファイルの読み込み
df = pd.read_csv('example.csv', nrows=10)
print(df)

ここでは、nrowsで読み込む行数を指定しています。上記の例では、10行を読み込んでいます。

行指定読み込みの応用例

行指定読み込みは、大量のデータがある場合に、一部のデータだけを読み込むことができるため、メモリの節約にもなります。

また、行指定読み込みは、データの前処理などを行う際にも有用です。例えば、以下のように、特定の条件を満たす行だけを読み込んで、加工することができます。

import pandas as pd
# CSVファイルの読み込み
df = pd.read_csv('example.csv')
# 条件を満たす行だけを抽出
df2 = df[df['age'] >= 20]
# 平均年齢を計算
mean_age = df2['age'].mean()
print(mean_age)

ここでは、age列が20以上の行だけを抽出して、平均年齢を計算しています。

エラーが起きたときの対処法

CSVファイルの読み込みでエラーが起きた場合は、以下のような対処法があります。

  • 区切り文字が違う場合は、delimiterオプションで区切り文字を指定し直します。
  • 行数が多すぎる場合は、skiprowsやnrowsオプションで読み込む行数を減らします。
  • データ型が違う場合は、dtypeオプションでデータ型を指定し直します。
  • ファイルの文字コードが違う場合は、encodingオプションで文字コードを指定し直します。

まとめ

CSVファイルの読み込みには、numpyとpandasを使うことができます。numpyは、データ型が同じ場合に高速に読み込むことができますが、列名や欠損値の処理が煩雑です。pandasは、列名や欠損値の処理が簡単で、高機能ですが、numpyよりも遅い場合があります。また、行指定読み込みは、大量のデータがある場合に、一部のデータだけを読み込むことができるため、メモリの節約にもなります。