pandasでcsv/tsvファイル読み込み

read_csv()read_table()を使う。

read_csvとread_table

read_csv()read_table()はデフォルトの区切り文字が違うだけで中身は同じ。read_csv()はカンマ,read_table()はタブ\t

ソースを見ると同じ関数を呼び出している。

parsers.pylink
662
663
664
665
666
read_csv = _make_parser_function('read_csv', sep=',')
read_csv = Appender(_read_csv_doc)(read_csv)
read_table = _make_parser_function('read_table', sep='\t')
read_table = Appender(_read_table_doc)(read_table)

csvファイル(カンマ区切り)を読みたいときはread_csv()、tsvファイル(タブ区切り)を読みたいときはread_table()でOK。

カンマでもタブでもない場合、引数(sepdelimiter)で区切り文字を設定できる。

以下、read_csv()で説明するが、read_tableでも同じ。

headerがない場合

headerがない以下のようなcsvファイルの場合。

sample.csvlink
1
2
3
11,12,13,14
21,22,23,24
31,32,33,34

なにも引数を設定しないと、1行目がheaderとして認識されてしまう。

pandas_csv_tsv.pylink
1
2
3
4
5
6
7
8
9
10
import pandas as pd
df = pd.read_csv('data/src/sample.csv')
print(df)
# 11 12 13 14
# 0 21 22 23 24
# 1 31 32 33 34
print(df.columns)
# Index(['11', '12', '13', '14'], dtype='object')

header=Noneとするとpandasが勝手に列名を割り当ててくれる。

pandas_csv_tsv.pylink
12
13
14
15
16
17
df_none = pd.read_csv('data/src/sample.csv', header=None)
print(df_none)
# 0 1 2 3
# 0 11 12 13 14
# 1 21 22 23 24
# 2 31 32 33 34

names=('A', 'B', 'C', 'D')のように設定することも出来る。

pandas_csv_tsv.pylink
19
20
21
22
23
24
df_names = pd.read_csv('data/src/sample.csv', names=('A', 'B', 'C', 'D'))
print(df_names)
# A B C D
# 0 11 12 13 14
# 1 21 22 23 24
# 2 31 32 33 34

headerがある場合

headerがある以下のようなファイルの場合。

sample_header.csvlink
1
2
3
4
a,b,c,d
11,12,13,14
21,22,23,24
31,32,33,34

header=0のようにheaderの行番号を0始まりで指定する。デフォルトがheader=0なので、最初の行がheaderの場合は省略しても同じ結果。

pandas_csv_tsv.pylink
26
27
28
29
30
31
32
33
34
35
36
37
38
df_header = pd.read_csv('data/src/sample_header.csv')
print(df_header)
# a b c d
# 0 11 12 13 14
# 1 21 22 23 24
# 2 31 32 33 34
df_header_0 = pd.read_csv('data/src/sample_header.csv', header=0)
print(df_header_0)
# a b c d
# 0 11 12 13 14
# 1 21 22 23 24
# 2 31 32 33 34

indexがある場合

headerとindex(1列目)がある以下のようなファイルの場合。

sample_header_index.csvlink
1
2
3
4
,a,b,c,d
ONE,11,12,13,14
TWO,21,22,23,24
THREE,31,32,33,34

何も指定しないと特にindex列は認識されない。

pandas_csv_tsv.pylink
40
41
42
43
44
45
46
47
48
df_header_index = pd.read_csv('data/src/sample_header_index.csv')
print(df_header_index)
# Unnamed: 0 a b c d
# 0 ONE 11 12 13 14
# 1 TWO 21 22 23 24
# 2 THREE 31 32 33 34
print(df_header_index.columns)
# Index(['Unnamed: 0', 'a', 'b', 'c', 'd'], dtype='object')

index_col=0のようにindexの列番号を0始まりで指定するといい感じに。

pandas_csv_tsv.pylink
50
51
52
53
54
55
df_header_index_col = pd.read_csv('data/src/sample_header_index.csv', index_col=0)
print(df_header_index_col)
# a b c d
# ONE 11 12 13 14
# TWO 21 22 23 24
# THREE 31 32 33 34

その他の引数

  • skiprows : list-like or integer
    • スキップする(読み込まない)行番号をリストで指定する。
    • または、ファイルの先頭を何行スキップするか、行数を整数で指定する。
  • skipfooter : int, default 0
    • ファイルの末尾を何行スキップするか、行数を整数で指定する。
  • usecols : array-like
    • 読み込む列番号をリストで指定する。指定された列だけが返される。

tsvの場合

はじめに書いた通り、tsvファイル(タブ区切り)を読みたいときはread_table()を使えばよい。

以下のようなファイルの場合。

sample_header_index.tsvlink
1
2
3
4
a b c d
ONE 11 12 13 14
TWO 21 22 23 24
THREE 31 32 33 34

引数などはread_csv()と同じでOK。

pandas_csv_tsv.pylink
57
58
59
60
61
62
df_tsv = pd.read_table('data/src/sample_header_index.tsv', index_col=0)
print(df_tsv)
# a b c d
# ONE 11 12 13 14
# TWO 21 22 23 24
# THREE 31 32 33 34

read_csv()で区切り文字にタブ文字\tを設定しても読める。

pandas_csv_tsv.pylink
64
65
66
67
68
69
df_tsv_sep = pd.read_csv('data/src/sample_header_index.tsv', index_col=0, sep='\t')
print(df_tsv_sep)
# a b c d
# ONE 11 12 13 14
# TWO 21 22 23 24
# THREE 31 32 33 34
スポンサーリンク

関連記事