銀河鉄道

【Python】シートにあるデータを配列に格納する|pandas.DataFrame

サムネイル
[Python]Excel datapandas.DataFrame
pandasの
DataFrame

Excel シートを DataFrame に読み込む

import pandas as pd

def get_current_region_df(df, row, col):
    """
    Get CurrentRegion (連続データ領域) as a DataFrame
    指定セルを基点としたCurrentRegionをDataFrameとして返す
    row, col は 0-based index
    """
    # Validate input / 入力検証
    if row < 0 or col < 0:
        return pd.DataFrame()
    
    max_row, max_col = df.shape
    
    # Expand upwards / 上方向
    top = row
    while top > 0 and pd.notna(df.iat[top - 1, col]):
        top -= 1
    
    # Expand downwards / 下方向
    bottom = row
    while bottom < max_row - 1 and pd.notna(df.iat[bottom + 1, col]):
        bottom += 1
    
    # Expand left / 左方向
    left = col
    while left > 0 and pd.notna(df.iat[row, left - 1]):
        left -= 1
    
    # Expand right / 右方向
    right = col
    while right < max_col - 1 and pd.notna(df.iat[row, right + 1]):
        right += 1
    
    # Slice region / 領域をスライス
    region_df = df.iloc[top:bottom+1, left:right+1]
    
    return region_df

Example Usage

# Excel 読み込み / Read Excel
df = pd.read_excel("test.xlsx", sheet_name="Sheet1", header=None)

# B2 (Excel基準) → indexでは (1,1)
region = get_current_region_df(df, 1, 1)

print(region)

  • pandas.read_excel でシートを DataFrame に直接読み込む
  • DataFrame では「基点セルから上下左右に空セルまで広がる領域」を計算して切り出す
  • 戻り値は 別 DataFrame として返すとDataFrame として保持できる

pd.notna って?

欠損値を判定するの

pd.notna|欠損値(NaN / None)の判定

  1. pd.notna(...)
    • pandas の欠損値判定関数。
    • pd.notna(x)xNaN/None でないなら True を返す。
    • 逆に pd.isna(x) は欠損値なら True を返す。
  2. df.iat[top - 1, col]
    • DataFrame のセルに「行番号」「列番号」でアクセスする方法。
    • .iat高速な位置指定アクセス (integer position access)
    • 例: df.iat[0, 1] → 1行目2列目の値。

Example

import pandas as pd
import numpy as np

data = [[1, 2, None],
        [4, np.nan, 6],
        [7, 8, 9]]

df = pd.DataFrame(data)

print(df.iat[0, 2])           # -> None
print(pd.notna(df.iat[0, 2])) # -> False (空だから)
print(df.iat[1, 1])           # -> nan
print(pd.notna(df.iat[1, 1])) # -> False (NaNだから)
print(df.iat[2, 2])           # -> 9
print(pd.notna(df.iat[2, 2])) # -> True (値あり)

| pd.notna | 欠損値でないかを判定 |
| pd.isna | 欠損値かを判定 |
| .iat | 行列番号で高速アクセス |
| NaN | 欠損値(数値型の空) |
| None | 欠損値(Pythonの空) |

Use pd.notna(df.iat[r, c]) to safely check if a DataFrame cell has a value.

DataFrameのセルに値が入っているかを判定するには pd.notna(df.iat[r, c]) を使う

なお、注意点は
B2セルが(1,1)になること

Excel のセル番地 (B2) と pandas のインデックス (0-based) にはズレがある

Excel基準

  • Excel は 行番号・列番号が 1-based(1から始まる)
  • B2 = 「2行目、2列目」。

pandas基準

  • pandas の .iat.iloc0-based index(0から始まる)
  • よって Excel の (2,2) は pandas では (1,1)。

Example

import pandas as pd

# 仮のシートデータ (3x3)
df = pd.DataFrame([
    ["A1", "B1", "C1"],
    ["A2", "B2", "C2"],
    ["A3", "B3", "C3"]
])

print(df)         # 表示
print(df.iat[1,1]) # -> "B2"

出力:

     0    1    2
0   A1   B1   C1
1   A2   B2   C2
2   A3   B3   C3

ここで df.iat[1,1]"B2" を返す。

Excel と pandas の対応表

Excelpandas.iat説明
A1(0,0)左上
B2(1,1)2行2列目
C5(4,2)5行3列目

Remember: Excel = 1-based, pandas = 0-based.

Excelは1始まり、pandasは0始まりを忘れないこと

| 1-based Index | 1始まりインデックス |
| 0-based Index | 0始まりインデックス |
| Cell Reference | セル参照 |
| Offset | オフセット |
| Mapping | 対応関係 |

Referenced Insights & Citations

Use pandas DataFrame
when your goal is data analysis

著者

author
月うさぎ

編集後記:
この記事の内容がベストではないかもしれません。

記事一覧