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

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

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

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

Q&A

解決済

1回答

537閲覧

pandasのデータフレームのインデックスを変更したい

akiyamachan

総合スコア14

Python

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

0グッド

0クリップ

投稿2020/04/07 01:25

Python

1 pop={'Nevada':{2001:2.4,2002:2.9}, 2 ...: 'Ohio':{2000:1.5,2001:1.7,2002:3.6}}

ネストしたディクショナリをデータフレームに渡し、pandasは外部のディクショナリのキーを列のインデックスとして解釈し、内側のインデックスのキーを行のインデックスとして解釈する

Python

1 frame3=pd.DataFrame(pop) 2In [8]: frame3 3Out[8]: 4 Nevada Ohio 52000 NaN 1.5 62001 2.4 1.7 72002 2.9 3.6

データフレームのインデックスを再指定したいが、エラーがおきる

Python

1In [10]: pd.DataFrame(pop,index=[2001,2002,2003]) 2--------------------------------------------------------------------------- 3AttributeError Traceback (most recent call last) 4<ipython-input-10-c1bf933df4c1> in <module> 5----> 1 pd.DataFrame(pop,index=[2001,2002,2003]) 6 7~\Anaconda3\lib\site-packages\pandas\core\frame.py in __init__(self, data, index, columns, dtype, copy) 8 346 dtype=dtype, copy=copy) 9 347 elif isinstance(data, dict): 10--> 348 mgr = self._init_dict(data, index, columns, dtype=dtype) 11 349 elif isinstance(data, ma.MaskedArray): 12 350 import numpy.ma.mrecords as mrecords 13 14~\Anaconda3\lib\site-packages\pandas\core\frame.py in _init_dict(self, data, index, columns, dtype) 15 457 arrays = [data[k] for k in keys] 16 458 17--> 459 return _arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype) 18 460 19 461 def _init_ndarray(self, values, index, columns, dtype=None, copy=False): 20 21~\Anaconda3\lib\site-packages\pandas\core\frame.py in _arrays_to_mgr(arrays, arr_names, index, columns, dtype) 22 7357 23 7358 # don't force copy because getting jammed in an ndarray anyway 24-> 7359 arrays = _homogenize(arrays, index, dtype) 25 7360 26 7361 # from BlockManager perspective 27 28~\Anaconda3\lib\site-packages\pandas\core\frame.py in _homogenize(data, index, dtype) 29 7659 if isinstance(v, dict): 30 7660 if oindex is None: 31-> 7661 oindex = index.astype('O') 32 7662 33 7663 if isinstance(index, (DatetimeIndex, TimedeltaIndex)): 34 35AttributeError: 'list' object has no attribute 'astype'

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

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

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

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

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

magichan

2020/04/07 01:56

現状のコード "frame3=pd.DataFrame(pop)" で [2000,2001,2002]が問題なくIndexとして設定されているにも関わらず、「データフレームのインデックスを再指定したい」のは何故ですか? 何がしたいのかよくわかりません。
akiyamachan

2020/04/07 02:05

Nevada Ohio 2000 NaN 1.5 2001 2.4 1.7 2002 2.9 3.6 ↓ Nevada Ohio 2001 2.4 1.7 2002 2.9 3.6 2003 NaN NaN になるらしく、機能の確認のためです。わかりにくくて申し訳ありません
guest

回答1

0

ベストアンサー

DataFrame.reindex() をお使いください

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

Python

1import pandas as pd 2pop={'Nevada':{2001:2.4,2002:2.9}, 3 'Ohio':{2000:1.5,2001:1.7,2002:3.6}} 4 5df = pd.DataFrame(pop).reindex([2001,2002,2003]) 6# Nevada Ohio 7#2001 2.4 1.7 8#2002 2.9 3.6 9#2003 NaN NaN

投稿2020/04/07 02:15

magichan

総合スコア15898

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問