CSVファイル
読込
pd.read_csv('ファイル名')
- 一行目(ヘッダー行)をカラム名としない場合は
header=None
とする。デフォルトは一行目がカラム名になる。 - カラム名を指定する場合は、
names=('A', 'B', 'C', 'D')
とタプル型で設定する。
# 自動的に一行目がカラム名になる df = pd.read_csv('filename.csv') # カラム名なし df = pd.read_csv('filename.csv', header=None) # カラム名を指定 df = pd.read_csv('filename.csv', names=('A', 'B', 'C', 'D')) # インデックスを指定(0列目) df = pd.read_csv('filename.csv', index_col=0)
保存(出力)
df.to_csv(ファイル名)
- カラム名(ヘッダー)を出力させない場合は、
header=False
とする。 - インデックスの列を出力させない場合は、
index=False
とする。 - 出力ファイルの文字コードを指定する場合は、
encoding="shift_jis"
などとする。
# 保存 df.to_csv("filename.csv") # ヘッダーとインデックを含めない df.to_csv("filename.csv", header=False, index=False) # 文字コードを指定する(読み込むファイルの文字コードを指定する df.to_csv("filename.csv", encoding="shift_jis")
EXCELファイル
読込
単一シートの読込
pd.read_excel('ファイル名')
- この関数は別途ライブラリが必要で、 ‘xlrd’をインストールしておきましょう。
pip install xlrd
- インデックスを指定する場合は、
index_col=0
と列番号を設定します。[0,1]
のようにリスト型で指定すると、複数のインデックス(マルチインデックス)になります。 header=None
とすると一行目からデータとなり、カラム名は連番になります。dtype={'カラム名': str, 'カラム名': float}
のようにデータ型(タイプ)を指定して読み込むことができます。- シート名を指定する場合は、
sheet_name=シート番号
とまたはsheet_name='シート名'
とします。
test.xlsxのSheet1
aaa | bbb | ccc |
1 | 2 | 3 |
4 | 5 | 6 |
print(pd.read_excel('test.xlsx')) # aaa bbb ccc # 0 1 2 3 # 1 4 5 6 print(pd.read_excel('test.xlsx', index_col=0)) # bbb ccc # aaa # 1 2 3 # 4 5 6
複数シートの読込
pd.read_excel('ファイル名', sheet_name=シート名のリスト型)
- シート名をリスト型で指定します。この場合も、シート番号もOKです。
- 返り値は、連想配列になっていますので、シート名(シート番号を指定した場合はシート番号)を指定すると、個別のデータフレームを取得することができます。
index_col
でインデックスを指定することができますが、シート個別にはできません。- すべてのシートを読み込む場合は、
sheet_name=None
とします。返り値の連想配列はシート名で指定します。
print(pd.read_excel('test.xlsx', sheet_name=["Sheet1", "Sheet2"])) # OrderedDict([('Sheet1', aaa bbb ccc # 0 1 2 3 # 1 4 5 6), ('Sheet2', aaa bbb ccc # 0 1 2 3 # 1 4 5 6)]) df_array = pd.read_excel('test.xlsx', sheet_name=["Sheet1", "Sheet2"]) print(df_array["Sheet1"]) # aaa bbb ccc # 0 1 2 3 # 1 4 5 6 print(df_array["Sheet2"]) # aaa bbb ccc # 0 1 2 3 # 1 4 5 6 df_array = pd.read_excel('test.xlsx', index_col=0, sheet_name=["Sheet1", "Sheet2"]) print(df_array["Sheet1"]) # bbb ccc # aaa # 1 2 3 # 4 5 6 print(df_array["Sheet2"]) # bbb ccc # aaa # 1 2 3 # 4 5 6
保存(出力)
新規ファイルで出力
df.to_excel('ファイル名')
- この関数は別途ライブラリが必要で、 ‘openpyxl’ or ‘xlsxwriter’のどちらかをインストールしておきましょう。
pip install openpyxl
pip install xlsxwriter
- シート名を指定する場合は、
sheet_name
とします。日本語も大丈夫でした。 - インデックス(行名)やカラム(列名)を出力させない場合は以下のように引数を指定する。
例)インデックスが不要な場合:df.to_excel("filename.xlsx", index=False)
- インデックス:
index=False
- カラム:
header=False
- インデックス:
df = pd.DataFrame([[1,2,3],[4,5,6]], columns = ["aaa", "bbb", "ccc"]) # リスト型のデータで作成 df = df.set_index('aaa') print(df) # bbb ccc # aaa # 1 2 3 # 4 5 6 df.to_excel('test1.xlsx') # シート名を指定 df.to_excel('test2.xlsx', sheet_name='シート名')
複数のデータフレームを出力
with
で新規にファイルを作成し、データフレームを追加(出力)していきます。- 追加する際に、シート名を指定しないと上書きされるので2番目以降は必ず指定します。
df = pd.DataFrame([[1,2,3],[4,5,6]], columns = ["aaa", "bbb", "ccc"]) # リスト型のデータで作成 df = df.set_index('aaa') print(df) # bbb ccc # aaa # 1 2 3 # 4 5 6 df2 = df.copy() df2 = df2 + 1 print(df2) # bbb ccc # aaa # 1 3 4 # 4 6 7 # 複数のデータフレームを出力 with pd.ExcelWriter('test3.xlsx') as writer: df.to_excel(writer, sheet_name='sheet1') df2.to_excel(writer, sheet_name='sheet2')
既存のファイルに出力
with
で既存のファイルを開き、データフレームを追加(出力)していきます。- シート名が重複した場合は自動的に他のシート名になります。
with pd.ExcelWriter('test.xlsx', mode='a') as writer: df.to_excel(writer)
JSONファイル
読込
pd.read_json('ファイル名')
- ファイルが圧縮されている場合は、
compression='gzip'
と指定する。
種類:{‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’,} - orientstrでJSONの形式を指定できる。(次の「出力」のところで詳細を紹介しています。)
- ‘split’ : dict like {index -> [index], columns -> [columns], data ->[values]}
- ‘records’ : list like [{column -> value}, … , {column -> value}]
- ‘index’ : dict like {index -> {column -> value}}
- ‘columns’ : dict like {column -> {index -> value}}
- ‘values’ : just the values array
test.json
{ "bbb": { "1": 2, "4": 5 }, "ccc": { "1": 3, "4": 6 } }
df = pd.read_json('test.json') print(df) # bbb ccc # 1 2 3 # 4 5 6 df = pd.read_json('test.gzip', compression='gzip') print(df) # bbb ccc # 1 2 3 # 4 5 6
保存(出力)
新規ファイルで出力
df.to_json(ファイル名)
orientstr
でフォーマット(形式)を指定することができます。後ほど説明します。デフォルトはcolumnsです。compression
でデータを圧縮することができます。
種類:{‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’}
df = pd.DataFrame([[1,2,3],[4,5,6]], columns = ["aaa", "bbb", "ccc"]) df = df.set_index('aaa') print(df) # bbb ccc # aaa # 1 2 3 # 4 5 6 print(df.to_json()) # {"bbb":{"1":2,"4":5},"ccc":{"1":3,"4":6}} df.to_json("test.json")
orientstrのフォーマット(形式)
- ‘split’ : dict like {‘index’ -> [index], ‘columns’ -> [columns], ‘data’ -> [values]}
- ‘records’ : list like [{column -> value}, … , {column -> value}]
- ‘index’ : dict like {index -> {column -> value}}
- ‘columns’ : dict like {column -> {index -> value}}*デフォルト
- ‘values’ : just the values array
- ‘table’ : dict like {‘schema’: {schema}, ‘data’: {data}}
少しわかりにくいので、以下に出力してみました。json.dumps(json.loads())で整形しています。
print(json.dumps(json.loads(df.to_json(orient='split')), indent=2)) # { # "columns": [ # "bbb", # "ccc" # ], # "index": [ # 1, # 4 # ], # "data": [ # [ # 2, # 3 # ], # [ # 5, # 6 # ] # ] # } print(json.dumps(json.loads(df.to_json(orient='records')), indent=2)) # [ # { # "bbb": 2, # "ccc": 3 # }, # { # "bbb": 5, # "ccc": 6 # } # ] print(json.dumps(json.loads(df.to_json(orient='index')), indent=2)) # { # "1": { # "bbb": 2, # "ccc": 3 # }, # "4": { # "bbb": 5, # "ccc": 6 # } # } print(json.dumps(json.loads(df.to_json(orient='columns')), indent=2)) # { # "bbb": { # "1": 2, # "4": 5 # }, # "ccc": { # "1": 3, # "4": 6 # } # } print(json.dumps(json.loads(df.to_json(orient='values')), indent=2)) # [ # [ # 2, # 3 # ], # [ # 5, # 6 # ] # ] print(json.dumps(json.loads(df.to_json(orient='table')), indent=2)) # { # "schema": { # "fields": [ # { # "name": "aaa", # "type": "integer" # }, # { # "name": "bbb", # "type": "integer" # }, # { # "name": "ccc", # "type": "integer" # } # ], # "primaryKey": [ # "aaa" # ], # "pandas_version": "0.20.0" # }, # "data": [ # { # "aaa": 1, # "bbb": 2, # "ccc": 3 # }, # { # "aaa": 4, # "bbb": 5, # "ccc": 6 # } # ] # }
HTML
保存(出力)
インデックス・カラム名の出力の有無やID/Classの指定など、仕様に関しては細かくあるようですが、あまり利用シーンを思い浮かばないので割愛します。
以下がドキュメントですので参考にしてください。
pandas.DataFrame.to_html — pandas 2.2.2 documentation
import pandas as pd df = pd.DataFrame([[1,2,3],[4,5,6]], columns = ["aaa", "bbb", "ccc"]) # リスト型のデータで作成 df = df.set_index('aaa') print(df) # bbb ccc # aaa # 1 2 3 # 4 5 6 print(df.to_html()) # <table border="1" class="dataframe"> # <thead> # <tr style="text-align: right;"> # <th></th> # <th>bbb</th> # <th>ccc</th> # </tr> # <tr> # <th>aaa</th> # <th></th> # <th></th> # </tr> # </thead> # <tbody> # <tr> # <th>1</th> # <td>2</td> # <td>3</td> # </tr> # <tr> # <th>4</th> # <td>5</td> # <td>6</td> # </tr> # </tbody> # </table>
以下の感じになります。(CSSが効いているのでデザインは環境により異なります)
bbb | ccc | |
---|---|---|
aaa | ||
1 | 2 | 3 |
4 | 5 | 6 |
コメント