とっちゃん@nyanco! です。
今回はCSVデータの一列目をキーにして同じキーは1行にまとめるというPythonコードの共有です。
良く分からないかもですが、百聞は一見にしかずですにゃ~
出力したCSVファイルは必ず内容をチェックしてください。本記事で紹介するスクリプトの使用は自己責任でお願いいたします。
コードの動作環境
- OS:Windows10 ※macOSでは未確認
- Pythonバージョン:3.11.2
- 必要ライブラリ:特になし
何ができるコードか解説
まず、何ができるコードなのかを具体的な例を用いて解説しておきます。
▼まず、このようなCSVデータがあったとします(分かりやすいようにExcelで開いています)。
一列目がポイントですにゃ~
▼本記事で紹介するPythonコードを実行すると以下のようになります。
一見すると「??何が起こった?」という感じですが、一言で表すと一列目が同じ文字列の行を1行にまとめたということになります。
例えば元は一列目が「A」の行が2行あったけど、その2行分のデータを横並びで1行にマージ(合成)した感じですにゃ~
一列目が「B」の行は3行あったので、その分他より横に長くなってるのが分かると思います。
▼ちなみにキーとなる一列目は連続している必要はなく、このように離れた場所に「A」があったとしても…
▼このように1行にまとめてくれます!
数行であれば手作業でも全然できますが、数百行となるととてもじゃないけどやってられないのでPythonの出番というワケです。
Pythonの方が速いしヒューマンエラーも起きないですにゃ~
CSVの一列目をキーにして1行にまとめるコード
早速ですがコードはこちら!
import csv
def main():
# input.csvを読み込む
with open("input.csv", "r", encoding="shift_jis") as f:
reader = csv.reader(f)
# 1列目をキーにして、データを辞書に格納する
data = {}
for row in reader:
key = row[0]
if key not in data:
data[key] = []
data[key].extend(row[1:])
# 辞書の値を1行ずつ書き出す
with open("output.csv", "w", encoding="shift_jis", newline="", errors="replace") as f:
writer = csv.writer(f)
for key in data:
if key == "":
writer.writerow([key] + data[key])
else:
# input.csvの一列目をoutput.csvの一列目に追加
writer.writerow([key] + data[key])
if __name__ == "__main__":
main()
コードはChatGPTとBardで作成したものを少しカスタマイズしています。
▼サクッとすぐに使えるように下記より.pyファイルのダウンロードも可能です(zip圧縮しています)。
→【Shift-JIS】CSVの一列目をキーにして1行にまとめるPythonコードをダウンロード
▼上記はテキストエンコードが「Shift-JIS」バージョンですが、「UTF-8」バージョンも用意しました。
→【UTF-8】CSVの一列目をキーにして1行にまとめるPythonコードをダウンロード
Shift-JISバージョンで上手くいかない場合はUTF-8バージョンをお試しくださいにゃ~
使い方
簡単に使い方を解説します。
▼使い方としては、Pythonファイル(.pyファイル)と同じフォルダ内に処理したいCSVファイルを「input.csv」というファイル名に変更して、Pythonファイルを実行するだけです。
▼実行すると、数秒で同じフォルダ内に整形された「output.csv」が生成されます。
エクセルデータを処理したい!と言う場合は、一度Excelで開いて「ファイル」→「エクスポート」から「CSV」形式に書き出すと良いですにゃ~
おわりに
本記事がどなたかの参考になれば幸いです。
今回は以上となります。
最後まで読んでいただきましてありがとうございました!
それではまた〜✧٩(ˊωˋ*)و✧
コメント