如何在python中连接数据帧
我在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',
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
参数。请参阅我的答案以了解实施情况。