我在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]
似乎正在添加" 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 :(得分:2)
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.join.html
文档说明您在列标题之后使用后缀(即一个字后面的内容),它们会重叠。这并不意味着列标题设置为abbv
- 相反,您可以获得此行为,例如获得0NY
。
如果要将列标题设置为您的状态,请将其设置为df.rename,如下所示:
df = df.rename(columns={'0': abbv})
然后进行加入。
编辑: 或者设置标题以保存重命名:
df= pd.DataFrame(fred.get_series(series_id=str(abbv)+"UR",observation_start=start, observation_end=end), columns=[abbv])