🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

8072閲覧

pandasのデータフレームを追加できない

ORDER_KATE

総合スコア22

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2019/12/11 11:38

前提・実現したいこと

Pythonでメンバーの名前を入力した時、入力した日時を同時にインプットして下の画像のように蓄積できるプログラムを作ろうとしました。
いざ実行しようとすると以下のエラーメッセージが発生しました。
イメージ説明
イメージ説明
どういう風にコードを直せばいいでしょうか。よろしくお願いします。

発生している問題・エラーメッセージ

--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-2-aa10dc4aeae4> in <module> 7 df.loc[now.strftime('%Y-%m-%d')] = [now.strftime('%H:%M:%S'),input("Please Enter member_1: "),input("Please Enter member_2: ")\ 8 ,input("Please Enter member_3: "),input("Please Enter member_4: ")\ ----> 9 ,input("Please Enter member_5: "),input("Please Enter member_6: ")] 10 print(df) 11 ~\Anaconda3\lib\site-packages\pandas\core\indexing.py in __setitem__(self, key, value) 203 key = com.apply_if_callable(key, self.obj) 204 indexer = self._get_setitem_indexer(key) --> 205 self._setitem_with_indexer(indexer, value) 206 207 def _validate_key(self, key, axis: int): ~\Anaconda3\lib\site-packages\pandas\core\indexing.py in _setitem_with_indexer(self, indexer, value) 404 405 if missing: --> 406 return self._setitem_with_indexer_missing(indexer, value) 407 408 # set ~\Anaconda3\lib\site-packages\pandas\core\indexing.py in _setitem_with_indexer_missing(self, indexer, value) 645 # must have conforming columns 646 if len(value) != len(self.obj.columns): --> 647 raise ValueError("cannot set a row with mismatched columns") 648 649 value = Series(value, index=self.obj.columns, name=indexer) ValueError: cannot set a row with mismatched columns

該当のソースコード

Python

1import pandas as pd 2import datetime 3 4now = datetime.datetime.now() 5 6df = pd.read_csv('Rating.csv') 7df.loc[now.strftime('%Y-%m-%d')] = [now.strftime('%H:%M:%S'),input("Please Enter member_1: "),input("Please Enter member_2: ")\ 8 ,input("Please Enter member_3: "),input("Please Enter member_4: ")\ 9 ,input("Please Enter member_5: "),input("Please Enter member_6: ")] 10print(df) 11 12df.to_csv('Rating.csv')

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

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

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

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

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

guest

回答1

0

ベストアンサー

ValueError: cannot set a row with mismatched columns

カラム数が合っていないと思われます。

Python

1df.loc[now.strftime('%Y-%m-%d')] = [now.strftime('%H:%M:%S'),input("Please Enter member_1: "),input("Please Enter member_2: ")\ 2 ,input("Please Enter member_3: "),input("Please Enter member_4: ")\ 3 ,input("Please Enter member_5: "),input("Please Enter member_6: ")]

上記コードで7つの項目を追加しようとしていますが、カラム数は7でしょうか?
now.strftime('%H:%M:%S')はインデックスとして追加すれば十分ではないでしょうか。

投稿2019/12/11 12:16

meg_

総合スコア10736

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

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

ORDER_KATE

2019/12/11 12:49

御返答ありがとうございます。 ご指摘いただいたことを受けて ```python df.loc[0] = [now.strftime('%Y-%m-%d'),now.strftime('%H:%M:%S')\ ,input("Please Enter poke_1: "),input("Please Enter poke_2: ")\ ,input("Please Enter poke_3: "),input("Please Enter poke_4: ")\ ,input("Please Enter poke_5: "),input("Please Enter poke_6: ")] ``` と変更してみたところ 最初はうまく動いてくれました。 しかし、2回目を入力してみますと ``` ValueError Traceback (most recent call last) <ipython-input-5-134f14ddebb9> in <module> 8 ,input("Please Enter member_1: "),input("Please Enter member_2: ")\ 9 ,input("Please Enter member_3: "),input("Please Enter member_4: ")\ ---> 10 ,input("Please Enter member_5: "),input("Please Enter member_6: ")] 11 print(df) 12 ~\Anaconda3\lib\site-packages\pandas\core\indexing.py in __setitem__(self, key, value) 203 key = com.apply_if_callable(key, self.obj) 204 indexer = self._get_setitem_indexer(key) --> 205 self._setitem_with_indexer(indexer, value) 206 207 def _validate_key(self, key, axis: int): ~\Anaconda3\lib\site-packages\pandas\core\indexing.py in _setitem_with_indexer(self, indexer, value) 545 if len(labels) != len(value): 546 raise ValueError( --> 547 "Must have equal len keys and value " 548 "when setting with an iterable" 549 ) ValueError: Must have equal len keys and value when setting with an iterable ``` 出てしまいました。 df.loc[0]という記述がまずかったとは予想がつくのですが カラムの追加にコツなどありませんでしょうか…
meg_

2019/12/11 13:21

・カラム数は「8」だったということですか? ・df.loc[0]=XXXですと、最初のインデックスにデータを上書きしてしまいますが良いのですか? ・上記エラーについては情報が不足していますので、1回目の処理の後のdfの中身を確認してください。
ORDER_KATE

2019/12/12 07:57

・カラム数は8でした。 ・上書きではなく下の行に追加するようにしたいと思っています。 ・dfの中身はこんな具合です。 ,date,time,member_1,member_2,member_3,member_4,member_5,member_6 0,2019-12-11,21:39:21,a,b,c,d,e,f
meg_

2019/12/12 08:29

インデックスを当初のように「df.loc[now.strftime('%Y-%m-%d')]」にするとか、「0,1,2,3」と変えていくかすれば良いでしょう。 エラーの原因は分かりませんね。エラーは再現しますか?
ORDER_KATE

2019/12/12 12:52

インデックスを戻してカラムの数を一致させたらエラーが消えました! 丁寧に教えてくださり本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問