概要
この記事では、Pandasを使用してDataFrameから1行ずつデータを取得し、それを再度DataFrameに戻す方法と、Series型になってしまう場合の回避方法について紹介します。DataFrameを1行ずつ処理する際にSeries型に注意が必要ですが、簡単なコード例を通じて解決策を説明します。
問題
DataFrameをiterrows()を使って1行ずつ取得しようとしたところ、各行がSeries型として取得されてしまいました。以下はコード例です。
import pandas as pd
data = {
"No.": [1, 2, 3],
"番号": ["test1", "test2", "test3"],
"名前": ["name1", "name2", "name3"]
}
df = pd.DataFrame(data)
for _, row in df.iterrows():
print(row)
上記のコードでは、row 変数には各行がSeries型として取得されるため、データのアクセスがやや複雑になります。
解決策
Series型の発生を避ける方法として、取得した行データを辞書に変換してから再度DataFrameに変換する方法があります。以下がそのコード例です。
import pandas as pd
data = {
"No.": [1, 2, 3],
"番号": ["test1", "test2", "test3"],
"名前": ["name1", "name2", "name3"]
}
df = pd.DataFrame(data)
for i, row in enumerate(df.iterrows()):
_, row_data = row
# 行データを辞書に変換
row_dict = row_data.to_dict()
# 辞書をDataFrameに変換
row_df = pd.DataFrame(row_dict, index=[i])
# 処理した行データを表示
print(f"Processed Row {i + 1}:\n{row_df}\n")
この方法により、Series型の発生を回避しつつ、DataFrameとして扱いやすい形に行データを変換することができます。
終わりに
何かうまく行かないときは、焦らずに今使っている技術の仕組みを改めて確認し直すことが大切だと思いました。