概要
Pandas が空の場合に、 apply 実行した際に下記のエラーに遭遇しました。私はデータフレームが空の場合にはスキップすれば要件を満たせたため、その対応方法を共有します。
ValueError: Expected a 1D array, got an array with shape (0, 2)
エラーの再現方法と対応方法
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,
)
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 データフレームが空であるためスキップ")