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

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

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

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

pandas

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

Q&A

解決済

2回答

188閲覧

データの前処理の効率的なやり方がわからない。

YZYZ

総合スコア20

Python

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

pandas

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

0グッド

3クリップ

投稿2019/02/24 05:31

前提・実現したいこと

現在、データ分析の課題をやっていて、データのインポート、前処理、mergeをしております。
データの形が違うデータを前処理して扱いやすい形に直すことに苦戦しています。

発生している問題

python

1CountryName 2000 2001 2002 2003 2004 2Country1 Value10 Value11 Value12 Value13 Value14 3Country2 Value20 Value21 Value22 Value23 Value24 4Country3 Value30 Value31 Value32 Value33 Value34

となっているpandasデータフレームを

python

1CountryName Year VALUE 2Country1 2000 Value10 3Country1 2001 Value11 4Country1 2002 Value12 5Country1 2003 Value13 6Country1 2004 Value14 7Country2 2000 Value20 8Country2 2001 Value21 9Country2 2002 Value22 10Country2 2003 Value23 11Country2 2004 Value24 12Country3 2000 Value30 13Country3 2001 Value31 14Country3 2002 Value32 15Country3 2003 Value33 16Country3 2004 Value34 17

としたいのです。

試したこと

以前同じ問題に対処した時には転置した後でExcelファイルを手作業でいじって直しました。しかし今後もデータ分析を行うので、今回はこれをPandas上だけで対処できたらいいなと思い相談させていただきます。ググろうとしたのですが、上手く検索する言葉が思いつかず、直接的に解決することができなかったです。データのフォーマットが整っていないときに複数の作業を組み合わせて効率よく対処するコツや流れがありましたら教えてくだされば嬉しいです。

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

Python3.7を使ってます。pandasのデータフレームで処理してます。

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

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

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

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

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

guest

回答2

0

ベストアンサー

Dataframe.melt() をお使いください。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.melt.html

下のサンプルでは sort_values()にて質問での出力とオーダーが揃うようにしてあります。

Python

1import pandas as pd 2df = pd.DataFrame({ 3 'CountryName' : ['Country1','Country2','Country3'], 4 '2000' : ['Value10','Value20','Value30'], 5 '2001' : ['Value11','Value21','Value31'], 6 '2002' : ['Value12','Value22','Value32'], 7 '2003' : ['Value13','Value23','Value33'], 8 '2004' : ['Value14','Value24','Value34'], 9}) 10df = df.melt(id_vars='CountryName', var_name='Year').sort_values('CountryName').reset_index(drop=True) 11print(df) 12# CountryName Year value 13#0 Country1 2000 Value10 14#1 Country1 2001 Value11 15#2 Country1 2002 Value12 16#3 Country1 2003 Value13 17#4 Country1 2004 Value14 18#5 Country2 2000 Value20 19#6 Country2 2001 Value21 20#7 Country2 2002 Value22 21#8 Country2 2003 Value23 22#9 Country2 2004 Value24 23#10 Country3 2000 Value30 24#11 Country3 2001 Value31 25#12 Country3 2002 Value32 26#13 Country3 2003 Value33 27#14 Country3 2004 Value34

投稿2019/02/24 14:38

編集2019/02/24 23:52
magichan

総合スコア15898

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

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

YZYZ

2019/02/26 01:38

ありがとうございます!こういうメソッドが知りたかったです!そのまま使わせていただきます!
guest

0

未検証ですが、pandas のメソッドを調べてみると、
renameメソッドで列名を統一しつつ、concatメソッドで全ての列を1列にした巻物のようなデータフレームを作ります。その際には各年のデータが空フィールドではないものに絞る必要があるかも知れません。
このデータフレームをsort_valuesメソッドでCountryNameとYearの昇順でソートすれば、思惑の出力となります。

投稿2019/02/24 06:26

編集2019/02/24 06:31
seastar3

総合スコア2285

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

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

YZYZ

2019/02/26 01:39

返答が遅くなってしまいすみません。ご回答頂きありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問