0
0

空のPandas データフレームに対して apply を実行した際に発生するエラーについて

Posted at

概要

Pandas が空の場合に、 apply 実行した際に下記のエラーに遭遇しました。私はデータフレームが空の場合にはスキップすれば要件を満たせたため、その対応方法を共有します。

ValueError: Expected a 1D array, got an array with shape (0, 2)

image.png

エラーの再現方法と対応方法

1. エラーを再現

import pandas as pd

pdf = pd.DataFrame(columns=['col_1'])

tmp_col_name = "temp"
tmp_col_delete_flg = "temp_delete"
encoding = "cp932"
col_names_and_bytes  = {
    "col_1": 10,
}
for col_n, col_b in col_names_and_bytes.items():
    pdf[tmp_col_name] = pdf[col_n].str.encode(encoding).str.len().fillna(0).astype(int)

    pdf[tmp_col_delete_flg] = pdf.apply(
        lambda row: 1 if row[tmp_col_name] > col_b else 0,
        axis=1,
    )

image.png

2. 対応方法

Pandas データフレームが空の場合にスキップするように修正。

import pandas as pd

pdf = pd.DataFrame(columns=['col_1'])

tmp_col_name = "temp"
tmp_col_delete_flg = "temp_delete"
encoding = "cp932"
col_names_and_bytes  = {
    "col_1": 10,
}
if not pdf.empty:
    for col_n, col_b in col_names_and_bytes.items():
        pdf[tmp_col_name] = pdf[col_n].str.encode(encoding).str.len().fillna(0).astype(int)

        pdf[tmp_col_delete_flg] = pdf.apply(
            lambda row: 1 if row[tmp_col_name] > col_b else 0,
            axis=1,
        )
else:
    print("Pandas データフレームが空であるためスキップ")

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0