【Python】PandasでCSVファイルのリード・ライトをしたときのインデックス、ヘッダーについて

はじめに

PandasのDataFrame型のデータを生成し、それをread_csvで読み出したりto_csvで保存するときのインデックスやヘッダーの状態を確認したいと思います。



開発環境

  • Windows 10
  • Python 3.10.5



確認

下のようなプログラムを実行してみます。

import pandas as pd

# インデックス、ヘッダーがあるDataFrame型のデータ
data_list = [[10, 20, 30, 40], [11, 21, 31, 41], [12, 22, 32, 42]]
df_list = pd.DataFrame(data_list, index=['data00', 'data01', 'data02'], columns=['clmn0', 'clmn1', 'clmn2', 'clmn3'])
# 生成されたdf_listを表示
print('df_list = ')
print(df_list)
df_list.to_csv('sample.csv')

# 単純にread_csvで読み出して表示
df_list_Default = pd.read_csv('sample.csv')
print ('df_list_Default = ')
print (df_list_Default)

インデックス及びヘッダーがあるDataFrame型のファイルdf_listを生成します。そしてこのファイルをprintで表示します。

df_list =
        clmn0  clmn1  clmn2  clmn3
data00     10     20     30     40
data01     11     21     31     41
data02     12     22     32     42

このようにインデックスとヘッダーがついています。

このファイルをto_csvによりsample.csvとして保存します。念のため保存されたsample.csvをEXCELで確認してみます。

同じ内容であることが確認されました。次に単純にread_csvで読み出した後、printで表示します。

df_list_Default =
  Unnamed: 0  clmn0  clmn1  clmn2  clmn3
0     data00     10     20     30     40
1     data01     11     21     31     41
2     data02     12     22     32     42

ここでわかることは、単純にread_csvで読み出すとヘッダーはヘッダーとして認識されるようですが、インデックスについては1つの列として扱われ、新たに数字でインデックスが追加されることになります。

# header=Noneを設定しread_csvで読み出して表示
df_list_HeaderNone = pd.read_csv('sample.csv', header=None)
print ('df_list_HeaderNone = ')
print (df_list_HeaderNone)

header=Noneを設定してread_csvを実行した場合、printで以下のように表示されます。

df_list_HeaderNone =
        0      1      2      3      4
0     NaN  clmn0  clmn1  clmn2  clmn3
1  data00     10     20     30     40
2  data01     11     21     31     41
3  data02     12     22     32     42

本来ヘッダーであったところは1つの行として認識され、新たに数字でヘッダーが追加されることになります。

# index_col=0を設定しread_csvで読み出して表示
df_list_IndexCol0 = pd.read_csv('sample.csv', index_col=0)
print ('df_list_IndexCol0 = ')
print (df_list_IndexCol0)

index_col=0を設定してread_csvを実行した場合、printで以下のように表示されます。

df_list_IndexCol0 =
        clmn0  clmn1  clmn2  clmn3
data00     10     20     30     40
data01     11     21     31     41
data02     12     22     32     42

これで保存されたデータと同じ形式になりました。

© 2024 サニーサイド