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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

Pandas or openpyxlでエクセルにデータを追加方法

fideo
fideo

総合スコア34

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

94閲覧

投稿2022/05/18 01:03

やりたいこと

下記のjsonのデータからmessageId・titleを取得しております。
取得後、該当のエクセルにmessageIdを書き出したいです。

Jsonファイル

{ { "tokens": [ "アメリカ" ], "page": 1, "totalCount": 3, "recordCount": 3, "hasMore": false, "isLimited": false, "records": [ { "roomId": 11264811, "messageId": 2268867581, "writerId": 13489121, "contentType": "post", "text": "アメリカ\n1", "createdAt": "2022-05-17T07:22:32.763Z", "updatedAt": "2022-05-17T07:22:32.778Z", "commentCount": 0, "pollId": -1, "postId": -1, "todoId": -1, "from": "web", "isThreaded": false, "mentions": [], "post": { "id": 2268867581, "title": "アメリカ", "body": "1" }, "target": { "from": 2268867581, "id": 2268867581, "contentType": "post", "title": "アメリカ\n1", "roomId": 11264811, "contentTypeId": 2268867581, "linkId": 2262266649 } }, { "roomId": 11264811, "messageId": 2268868257, "writerId": 13489121, "contentType": "post", "text": "アメリカ\n1", "createdAt": "2022-05-17T07:22:40.405Z", "updatedAt": "2022-05-17T07:23:06.210Z", "commentCount": 0, "pollId": -1, "postId": -1, "todoId": -1, "from": "web", "isThreaded": false, "mentions": [], "post": { "id": 2268868257, "title": "アメリカ", "body": "1" }, "target": { "from": 2268868257, "id": 2268868257, "contentType": "post", "title": "アメリカ\n1", "roomId": 11264811, "contentTypeId": 2268868257, "linkId": 2262267315 } }, { "roomId": 11264811, "messageId": 2268872585, "writerId": 13489121, "contentType": "post", "text": "アメリカ\n1", "createdAt": "2022-05-17T07:23:32.130Z", "updatedAt": "2022-05-17T07:23:32.157Z", "commentCount": 0, "pollId": -1, "postId": -1, "todoId": -1, "from": "web", "isThreaded": false, "mentions": [], "post": { "id": 2268872585, "title": "アメリカ", "body": "1" }, "target": { "from": 2268872585, "id": 2268872585, "contentType": "post", "title": "アメリカ\n1", "roomId": 11264811, "contentTypeId": 2268872585, "linkId": 2262271578 } } ] }

元のエクセル

no_platetitlemessage id
1563アメリカ
1563アメリカ
1341日本   2262271545 
1456イギリス2262271589 
1456アメリカ2262271522 
1565アメリカ 

期待する結果

Jsonから取得した順番のようにデータを下記のエクセルのようにmessage id
を書き込みしたいです。

#タイトル取得 title= [x["post"]["title"] for x in json_load["records"]] print(title) #メッセージID取得 messageId= [x["messageId"] for x in json_load["records"]] print(messageId) ['アメリカ', 'アメリカ', 'アメリカ'] [2268867581, 2268868257, 2268872585]

エクセルのカラムtitleと元のJsonファイルのtitle一致しております。
titleが重複する時があります。
message idが空白の場合、message idを追記したいです。

no_platetitlemessage id
1563アメリカ2268867581
1563アメリカ2268868257
1341日本   2262271545 
1456イギリス2262271589 
1456アメリカ2262271522 
1565アメリカ2268872585 

現在、下記のコードでセルを指定して書き出しております。
毎回データが変化するので、セルを指定せずに自動的に該当のmessageIdに入力可能でしょうか。
pandasもしくはopenpyxlで書き込みが詳しい方教えていただけませんでしょうか。

全体コード

from email import message import json import pandas as pd from openpyxl import load_workbook json_open = open("C:\\Users\\test\\Desktop\\test.json", 'r') json_load = json.load(json_open) print(json_load) #messageId取得方法 for分なし #messageId = json_load["records"][0]["messageId"] #messageId = json_load["records"][0]["post"]["title"] #print(messageId) #タイトル取得 title= [x["post"]["title"] for x in json_load["records"]] print(title) #メッセージID取得 messageId= [x["messageId"] for x in json_load["records"]] print(messageId) #エクセルファイル excelfile="C:\\Users\\test\\Desktop\\country.xlsx" #エクセル読み込み df = pd.read_excel(excelfile) print(df) # #df.loc['アメリカ':'アメリカ', 'アメリカ'] = [messageId] # print(df) # ワークブックを読み込む wb = load_workbook(excelfile) #シート指定 ws = wb['Sheet1'] #value値をDataFrameに変換 df = pd.DataFrame(ws.values) #JSONファイルから取得したタイトルとメッセージIDをエクセルに入力 ws['C2'] = json_load["records"][0]["messageId"] ws['C3'] = json_load["records"][1]["messageId"] ws['C6'] = json_load["records"][2]["messageId"] #エクセル保存 wb.save(excelfile) #エクセル読み込み print(df)

お手数ですが、よろしくお願い致します。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。