如何在python

时间:2017-07-09 20:15:04

标签: 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', 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

1 个答案:

答案 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])