PandasのDataFrameの初期化や結合

# はじめに
PandasのDataFrameのひな形や、DataFrame間の結合などの基本をまとめる。

# 目次
+ [空のDataFrameを作る](#空のdataframeを作る)
+ [日付をindexとした空のDataFrameを作る](#日付をindexとした空のdataframeを作る)
+ [DataFrameに列を追加する](#dataframeに列を追加する)
+ [DataFrameを任意の値で初期化](#dataframeを任意の値で初期化)
+ [DataFrame間を結合する](#dataframe間を結合する)
+ [DataFrameから特定の列を抜き出す](#DataFrameから特定の列を抜き出す)
+ [欠損値NaNの初期化](#欠損値nanの初期化)
+ [PandasのExcelCSV処理](#pandasのexcelcsv処理)

## 空のDataFrameを作る
```python:pandas_initial_sample.py
import pandas as pd

#空のデータフレーム
df = pd.DataFrame()
print(f'{df=}')

# df=Empty DataFrame
# Columns: []
# Index: []
```
[戻る](#目次)

## 日付をindexとした空のDataFrameを作る
```python:pandas_initial_sample.py
import pandas as pd
import datetime

#特定の日から今日までのdataframeの枠を作る
start_date = datetime.datetime(2025,1,1)
end_date   = datetime.datetime.now().strftime('%Y-%m-%d')

# start～endのindexを作る
date_range = pd.date_range(start=start_date, end=end_date, freq='D').strftime('%Y-%m-%d')

df = pd.DataFrame({
'A': [0] * len(date_range),
'B': [0] * len(date_range),
'C': [0] * len(date_range),
}, index=date_range)

print(df)

#             A  B  C
# 2025-01-01  0  0  0
# 2025-01-02  0  0  0
# 2025-01-03  0  0  0
# ...
# 2025-02-13  0  0  0
# 2025-02-14  0  0  0
# 2025-02-15  0  0  0
```
[戻る](#目次)

## DataFrameに列を追加する
```python:pandas_initial_sample.py
import pandas as pd

#列を追加する
df = pd.DataFrame()

#NaNの列追加--------
df['A'] = []*5 #列名Aで空を5行追加
print(f'{df=}')

# df=Empty DataFrame
# Columns: [A]
# Index: []

#0の列追加----------
df['B'] = [0]*5 #列名Bで0を5行追加
print(f'{df=}')

# df=    A  B
# 0 NaN  0
# 1 NaN  0
# 2 NaN  0
# 3 NaN  0
# 4 NaN  0
```

[戻る](#目次)

## DataFrameを任意の値で初期化
辞書型で値を入力すれば、DataFrameを初期化できる。
```python:pandas_initial_sample.py
import pandas as pd

# 空初期化--------------------
df = pd.DataFrame(
	{'A':[]*5
	,'B':[]*5
	,'C':[]*5})
print(f'{df=}')

# df=Empty DataFrame
# Columns: [A, B, C]
# Index: []

# 0初期化---------------------
df = pd.DataFrame(
	{'A':[0]*5
	,'B':[0]*5
	,'C':[0]*5})
print(f'{df=}')

# df=   A  B  C
# 0  0  0  0
# 1  0  0  0
# 2  0  0  0
# 3  0  0  0
# 4  0  0  0

# 任意の値で初期化--------------
df = pd.DataFrame(
	{'a':[1,2,3,4,5]
	,'b':[5,4,3,2,1]})
print(f'{df=}')

# df=   a  b
# 0  1  5
# 1  2  4
# 2  3  3
# 3  4  2
# 4  5  1
```
[戻る](#目次)

## DataFrame間を結合する
```pd.concat()```を使えば結合ができる。パラメータで結合方法を指定できる。
パラメータ|内容
---|---
axis|列結合 axis=1<br>行結合 axis=0
ignore_index|行結合の場合、indexを採番しなおす<br>ignore_index=True

+ 列を結合する
```python:pandas_initial_sample.py
import pandas as pd

df1 = pd.DataFrame(
	{'A':[0]*5
	,'B':[0]*5
	,'C':[0]*5})

df2 = pd.DataFrame(
	{'a':[1,2,3,4,5]
	,'b':[5,4,3,2,1]})

# axis=1 で列結合
df = pd.concat([df1,df2],axis=1)
print(f'{df=}')

# df=   A  B  C  a  b
# 0  0  0  0  1  5
# 1  0  0  0  2  4
# 2  0  0  0  3  3
# 3  0  0  0  4  2
# 4  0  0  0  5  1

```

+ 行を結合する
```python:pandas_initial_sample.py
import pandas as pd

df1 = pd.DataFrame(
	{'A':[0]*5
	,'B':[0]*5})

df2 = pd.DataFrame(
	{'A':[1,2,3,4,5]
	,'B':[5,4,3,2,1]})
	
# axis=1 で行結合
df = pd.concat([df1,df2],axis=0)
print(f'{df=}')

# df=   A  B
# 0  0  0
# 1  0  0
# 2  0  0
# 3  0  0
# 4  0  0
# 0  1  5
# 1  2  4
# 2  3  3
# 3  4  2
# 4  5  1

# axis=1 で行結合 ignore_index=True でindexを採番しなおす
df = pd.concat([df1,df2],axis=0,ignore_index=True)

# df=   A  B
# 0  0  0
# 1  0  0
# 2  0  0
# 3  0  0
# 4  0  0
# 5  1  5
# 6  2  4
# 7  3  3
# 8  4  2
# 9  5  1
```
[戻る](#目次)

## DataFrameから特定の列を抜き出す
列名を指定して抜き出す
```python:pandas_initial_sample.py
import pandas as pd

df = pd.DataFrame(
	{'A':[0]*5
	,'B':[1]*5
	,'C':[2]*5})

# A,C列抜き出し
df_choice = df[['A', 'C']]
print(f'{df_choice=}')

# df_choice=   A  C
# 0  0  2
# 1  0  2
# 2  0  2
# 3  0  2
# 4  0  2
```
[戻る](#目次)

## 欠損値NaNの初期化
DataFrame結合時に行列サイズが異なると、欠損値NaNが発生する。欠損値は```fillna()```で一括変換できる。

```python:pandas_initial_sample.py
import pandas as pd

df1 = pd.DataFrame(
	{'A':[0]*3
	,'B':[0]*3})

df2 = pd.DataFrame(
	{'C':[1]*5
	,'D':[1]*5})

df = pd.concat([df1,df2],axis=1)
print(f'{df=}')

# df=     A    B  C  D
# 0  0.0  0.0  1  1
# 1  0.0  0.0  1  1
# 2  0.0  0.0  1  1
# 3  NaN  NaN  1  1
# 4  NaN  NaN  1  1

# NaN→0変換
df_fillna=df.fillna(0)
print(f'{df_fillna=}')

# df_fillna=     A    B  C  D
# 0  0.0  0.0  1  1
# 1  0.0  0.0  1  1
# 2  0.0  0.0  1  1
# 3  0.0  0.0  1  1
# 4  0.0  0.0  1  1

# NaN→'a'変換
df_fillna=df.fillna('a')
print(f'{df_fillna=}')

# df_fillna=     A    B  C  D
# 0  0.0  0.0  1  1
# 1  0.0  0.0  1  1
# 2  0.0  0.0  1  1
# 3    a    a  1  1
# 4    a    a  1  1
```
[戻る](#目次)

## PandasのExcelCSV処理
https://qiita.com/tapitapi/items/0a0a84a6db46dcc07921

[戻る](#目次)