質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

343閲覧

複数のファイルを参照・結合したい

farinelli

総合スコア61

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2022/05/31 05:31

編集2022/05/31 06:17

前提

2つのファイルを参照・一致させて,片方のファイルに新たな列と数値を追加したい.

実現したいこと

1つ目のファイル(wals_languages_joshi.csv)のName列と2つ目のファイル(Joshi2020_list.csv)のname列の名称が一致した場合,2つ目のファイルのscore列を1つ目に追加したいです. (下記参照)
しかし,1つ目のファイルにname列とscore列が追加されたものの,エラーが出たのでお知恵をお借りしたいです.よろしくお願いします.

エラーメッセージ

Traceback (most recent call last): File "/Users/carlobroschi_imac/Workspace/wals_and_joshi.py", line 8, in <module> after_pd = after_pd.capitalize() File "/opt/homebrew/lib/python3.9/site-packages/pandas/core/generic.py", line 5575, in __getattr__ return object.__getattribute__(self, name) AttributeError: 'DataFrame' object has no attribute 'capitalize' carlobroschi_imac@CarlonoiMac Workspace % python3 wals_and_joshi.py Traceback (most recent call last): File "/Users/carlobroschi_imac/Workspace/wals_and_joshi.py", line 8, in <module> after_pd = after_pd.str.capitalize() File "/opt/homebrew/lib/python3.9/site-packages/pandas/core/generic.py", line 5575, in __getattr__ return object.__getattribute__(self, name) AttributeError: 'DataFrame' object has no attribute 'str'

該当のソースコード

python

1#!/usr/bin/env python3.8 2# -*- coding: utf-8 -*- 3import pandas as pd 4 5before_pd = pd.read_csv('wals_languages_joshi.csv') 6after_pd = pd.read_csv('Joshi2020_list.csv') 7after_pd = after_pd.str.capitalize() 8f=pd.merge(before_pd, after_pd, left_on='Name', right_on='name', how='outer') 9 10f.to_csv('result.csv',index=False, encoding='utf-8')

理想の出力

result.csv

1Name,Family,Subfamily,Genus,Macroarea,ISO639P3code,score 2Arapesh (Abu),Torricelli,,Kombio-Arapesh,, 3Aari,Afro-Asiatic,Omotic,South Omotic,Africa,aiw,0 4Abau,Sepik,,Upper Sepik,Papunesia,aau,0 5Arabic (Chadian),Afro-Asiatic,,Semitic,Africa,shu 6Abidji,Niger-Congo,,Kwa,Africa,abi

現在の出力

result.csv

1Name,Family,Subfamily,Genus,Macroarea,ISO639P3code,name,score 2Arapesh (Abu),Torricelli,,Kombio-Arapesh,,,, 3Aari,Afro-Asiatic,Omotic,South Omotic,Africa,aiw,, 4Abau,Sepik,,Upper Sepik,Papunesia,aau,, 5Arabic (Chadian),Afro-Asiatic,,Semitic,Africa,shu,, 6Abidji,Niger-Congo,,Kwa,Africa,abi,,

使用ファイル

wals_languages_joshi.csv

1Name,Family,Subfamily,Genus,Macroarea,ISO639P3code 2Arapesh (Abu),Torricelli,,Kombio-Arapesh,, 3Aari,Afro-Asiatic,Omotic,South Omotic,Africa,aiw 4Abau,Sepik,,Upper Sepik,Papunesia,aau 5Arabic (Chadian),Afro-Asiatic,,Semitic,Africa,shu 6Abidji,Niger-Congo,,Kwa,Africa,abi

Joshi2020_list.csv

1name,score 2a-pucikwar,0 3aari,0 4abau,0 5abaza,0 6abenaki,0

補足情報(FW/ツールのバージョンなど)

iMac,Python3.9.12,VSCode

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/05/31 05:55

現状の出力はどうなるんでしょうか
farinelli

2022/05/31 06:01

ただいま追加しました.ご確認の程よろしくお願いいたします.
melian

2022/05/31 06:01

大文字・小文字の違いがあるので merge では result.csv の様にはならないでしょう。
farinelli

2022/05/31 06:19

有難うございます.改良を試みたところエラーが出ました. もし宜しければご確認のほどよろしくお願いします.
melian

2022/05/31 06:52 編集

after_pd['name'] = after_pd['name'].str.capitalize() f=pd.merge(before_pd, after_pd, left_on='Name', right_on='name', how='left').drop(columns='name')
guest

回答1

0

on=['Name', 'name']だと両方に存在する同じ2つの列名をキーとしてマージするという動作になります。
異なる列名をキーとしてマージする場合はleft_on='Name', right_on='name'としてださい。

投稿2022/05/31 05:57

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

farinelli

2022/05/31 06:03

有難うございます.しかし「現在の出力」にもあるように,列名のみが追加されており中身が伴わず困っています.
can110

2022/05/31 06:20 編集

before_pdの「Name」列の値を小文字に変換した結果の列「name」をあらたに追加し この共通の「name」列でマージすればよいかと思います。 また、howも「outer」よりも「left」のほうが適切かと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問