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 openpyxlpip 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.3.0 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 |

コメント