如何在python中连接数据帧

如何在python中连接数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我在python中加入数据帧时遇到了一些问题。代码应该为每个美国州创建一个数据帧,并将其放入主数据帧中 我认为问题来自于专栏标题。当我打印它们时,我得到以下信息: 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',

我在python中加入数据帧时遇到了一些问题。代码应该为每个美国州创建一个数据帧,并将其放入主数据帧中

我认为问题来自于专栏标题。当我打印它们时,我得到以下信息:

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]
当我打印数据帧时,我得到:

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”,并替换了一些列标题(States)。起初,我从维基百科上获取各州的缩写词,但后来我想我会尝试手动输入,但那没有帮助。提前谢谢

这样做的目的是能够根据某些标准对不同的州进行排名

代码如下:

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

文档中说,在重叠的列标题后面使用后缀(即单词后面的后缀)。这并不意味着列标题被设置为
abbv
——相反,您可以在获得
0NY
的地方获得这种行为

如果要将列标题设置为您的状态,请使用df.rename将其设置为:

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

然后进行连接

编辑: 或者,将标题设置为保存重命名,如下所示:


df=pd.DataFrame(fred.get\u series(series\u id=str(abbv)+“UR”,observation\u start=start,observation\u end=end),columns=[abbv])

第一个“df”看起来像什么?我怀疑该系列中的某些内容正在影响您的列名。@t稍后请参阅更新我知道您已接受我的答案,但更好的解决方案是在形成第一个
df
数据帧时定义
columns
参数。请参阅我的答案以了解实施情况。