2017-07-09 4 views
2

私はPythonでデータフレームを結合する際にいくつか問題があります。このコードは、各米国の州のデータフレームを作成し、メインのデータフレームに入れることが想定されています。PythonでPandasデータフレームに参加するには

問題は列のタイトルから来ていると思います。私はそれらを印刷するとき、私はこれを取得:

Index([u'0AL', u'0', u'0AZ', u'0', u'0CO', u'0', u'0DE', u'0', u'0GA', u'0', 
     u'0IA', u'0', u'0IL', u'0', u'0KS', u'0', u'0LA', u'0', u'0MD', u'0', 
     u'0MI', u'0', u'0MO', u'0', u'0MT', u'0', u'0ND', u'0', u'0NH', u'0', 
     u'0NM', u'0', u'0NY', u'0', u'0OK', u'0', u'0PA', u'0', u'0SC', u'0', 
     u'0TN', u'0', u'0UT', u'0', u'0VT', u'0', u'0WI', u'0', u'0WY', u'0'], 
     dtype='object') 

私はデータフレームを印刷するとき、私はこれを取得:

  0AL 0 0AZ 0 0CO 0 0DE 0 0GA 0 ... 0TN 0 \ 
2017-01-01 6.5 6.4 3.8 5 5.2 2.9 4.5 4.4 5 5.5 ... 2.9 5.4 

      0UT 0 0VT 0 0WI 0 0WY 0 
2017-01-01 4.8 3.1 4 3.1 5.1 3.9 5.6 4.8 

[1 rows x 50 columns] 

それは(どこでも「0」を追加するだけでなく、列ヘッダの一部を交換しているようです州)。最初は、私はウィキペディアから州略語をつかんでいましたが、私は手動で入力しようと思っていましたが、それは助けにはなりませんでした。前もって感謝します。

この目的は、特定の基準に基づいてさまざまな状態をランク付けすることです。ここで

コードは次のとおりです。

from fredapi import Fred 
fred = Fred(api_key="XXXXXXXXXXXXXXXXX") 
import matplotlib.pyplot as plt 
from IPython.core.pylabtools import figsize 
import datetime 
import pandas as pd 
import time 
import html5lib 
import numpy as np 

#html= pd.read_html('https://en.wikipedia.org/wiki/List_of_states_and_territories_of_the_United_States') 
#us_states= html[0][1][2:] 

states =['AK','AL','AR','AZ','CA','CO','CT','DE','FL','GA','HI','IA','ID','IL','IN','KS','KY','LA','MA','MD','ME','MI','MN','MO','MS','MT','NC','ND','NE','NH', 'NJ','NM', 'NV','NY','OH','OK','OR','PA','RI','SC', 'SD','TN','TX','UT','VA','VT','WA','WI','WV',"WY"] 

start = datetime.datetime(2017,1,1) 
end = datetime.datetime(2017,1,1) 

figsize(40, 5) 

main_df = pd.DataFrame() 

for abbv in states: 

    df= pd.DataFrame(fred.get_series(series_id=str(abbv)+"UR",observation_start=start, observation_end=end)) 

    if main_df.empty: 
     main_df = df 

    else: 
     main_df = main_df.join(df, lsuffix=abbv) 


print main_df 

最初のデータフレームは、次のようになります。

   0 
2017-01-01 6.5 
+0

は、最初の 'DF' はどのようなものが見えますか?私は、シリーズの何かがあなたの列名に影響を与えていると思われます。 – TLOwater

+0

@TLOwater更新を参照してください – RageAgainstheMachine

+0

私はあなたが私の答えを受け入れたことを知っていますが、あなたが最初の 'df'データフレームを形成するときに' columns'パラメータを定義する方が良い解決策です。実装については私の答えを見てください。 – TLOwater

答えて

2

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.join.html

ドキュメントはあなたが後に来るサフィックス(つまり、何かを使用していることを述べています単語)を重ねて表示します。これは、列ヘッダーがabbvに設定されていることを意味するのではなく、たとえば、0NYを取得した場合に発生します。

あなたの状態に列ヘッダを設定する場合は、ようにdf.renameでそれを設定します。

df = df.rename(columns={'0': abbv})

を次に参加します。

EDIT: はまたように名前の変更を保存するには、ヘッダーを設定します。

df= pd.DataFrame(fred.get_series(series_id=str(abbv)+"UR",observation_start=start, observation_end=end), columns=[abbv])

関連する問題