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

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

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

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

Python

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

Q&A

解決済

2回答

776閲覧

pandas 連結処理に関して

yukicb

総合スコア21

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/03/30 14:58

編集2020/03/31 00:26

前提・実現したいこと

MacでVSCodeを利用し、pandasの連結を行っているのですが、連結したデータがNaNにて取り込まれてしまいます。(発生している問題・エラーメッセージの昨日部分参照)
上記、上手くいかない原因をお分かりの方がいればご教示いただけますと幸いです。
(「試したこと」に記載したように辞書で紐付けると上手くいくのですが、、)

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

今日 明日 明後日 昨日 A 1 2 3 NaN B 6 7 8 NaN

Python

Python

1import pandas as pd 2import numpy as np 3 4test1=pd.DataFrame([[1],[6]]) 5test=pd.DataFrame([[1,2,3],[6,7,8]],index=["A","B"],columns=["今日","明日","明後日"]) 6test["昨日"]=test1 7print(test)

試したこと

Python

1import pandas as pd 2import numpy as np 3 4test1=pd.Series({"A":1,"B":6}) 5test=pd.DataFrame([[1,2,3],[6,7,8]],index=["A","B"],columns=["今日","明日","明後日"]) 6test["昨日"]=test1 7print(test)

Python

1#結果 2 今日 明日 明後日 昨日 3A 1 2 3 1 4B 6 7 8 6

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

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

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

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

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

mackerel6.023

2020/03/31 00:08

質問のタイトルがcsvとなってますが、コードにはcsvを読み取っていると思われる処理が見当たりません。 コードだけ見て回答するならば、ラベルを指定して作った後にラベルの指定なしで値をセットできないだけで、言語仕様と思われますが、本来やりたいことがcsvファイルからの読み込みでラベル指定しても期待通りにならないということならば、「Python」のところに書いているコードをそのように修正してもらって、読み込んでいるcsvそのものも追記いただけると回答しやすくなると思います。
yukicb

2020/04/01 06:18

大変失礼いたしました。 CSVというワードを私の誤りで記載してしまっており、 相談内容に関しては、上記内容より変更はありませんでした。 以後投稿の際には気をつけます。ご指摘ありがとうございます。
guest

回答2

0

ベストアンサー

Python

1import pandas as pd 2import numpy as np 3 4test=pd.DataFrame([[1,2,3],[6,7,8]], 5 index=["A","B"], 6 columns=["今日","明日","明後日"])

上記のようなDataFrameの列名を指定してデータを挿入する場合、挿入するデータはリスト配列を使用します。

Python

1# リスト形式のデータをカラム名を指定して設定 2test1 = [1, 6] 3test["昨日"] = test1

または

Python

1# numpy配列のデータをカラム名を指定して設定 2test1 = np.array([1, 6]) 3test["昨日"] = test1

しかし残念ながら、下記のようにSeries型のデータはこの方法では挿入できません。

Python

1# これはできない 2test1 = pd.Series([1, 6]) 3test["昨日"] = test1 4# ==> NG

どうしても、このような形式でSeries型のデータを挿入したいのであれば、配列データに変換することで行うことができます。

Python

1# これならOK 2test1 = pd.Series([1, 6]) 3test["昨日"] = test1.values

通常 Series型のデータの場合は DataFrame.join()pandas.concat() を使用して結合します。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.join.html
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.concat.html

Python

1# Seriesデータの場合は join()で結合できる 2# この場合 Seriesデータの名前がそのまま列名となる 3# ただし、Indexは合わせておく必用あり 4test1 = pd.Series([1, 6], name='昨日', index=['A','B']) 5test = test.join(test1)

または

Python

1# Seriesデータの場合は concat()での結合でも可 2test1 = pd.Series([1, 6], name='昨日', index=['A','B']) 3test = pd.concat([test, test1], axis=1)

DataFrame型同士の場合も同様です。

Python

1# DataFrameの場合も join()で結合できる 2test1 = pd.DataFrame([[1,2], [6,7]], columns=['昨日1','昨日2'], index=['A','B']) 3test = test.join(test1)

または

# 当然DataFrame同士をconcat()で結合できる test1 = pd.DataFrame([[1,2], [6,7]], columns=['昨日1','昨日2'], index=['A','B']) test = pd.concat([test, test1], axis=1)

投稿2020/03/31 00:26

編集2020/03/31 00:47
magichan

総合スコア15898

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

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

yukicb

2020/04/01 06:16

ご連絡が遅れまして申し訳がありません。 いつも丁寧なご回答のほど、ありがとうございます!!????‍♂️ 上記にて上手く処理ができ、理解することができました!! 引き続き、宜しくお願い致します!
guest

0

python

1test["昨日"]=test1.values

投稿2020/03/31 00:14

meg_

総合スコア10749

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

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

yukicb

2020/04/01 06:19

ご回答ありがとうございます! 上記でも上手く処理を行うことができました! ただ、申し訳ありませんが、丁寧かつわかりやすさという点で、 今回は上の方をベストアンサーとさせていただきました。 引き続き何卒宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問