2017-08-08 39 views
1

我有一段代码,我需要在我的数据中为每个国家运行40次。我想写一个函数,让我输入国家名称作为参数,从而执行步骤,而不是用40个国家中每个国家的相同代码替换国家名称7次(实际上我已经完成了这已经)。 可再现码如下所示:函数来生成条形图

dict_usa={'NYC': 0.10, 
     'LA': -0.05, 
     'Chicago': -0.16, 
     'Miami': -0.04, 
     'Detroit': -0.19, 
     'Seattle': -0.2, 
     'Boston': -0.3} 


df_usa=pd.DataFrame({'usa':dict_usa}) 
df_usa.columns=['grade'] 
df_usa['positive']=df_usa['grade']>0 
##### Plot 
plt.subplots_adjust(left=.35) 
df_usa['grade'].plot(kind='barh', 
     color=df_usa.positive.map({True:'b', 
           False:'r'}), 
    title="usa") 
pylab.savefig('C:\\filepath\\Visuals\\test\\usatest.png') 

这产生数据帧df_usa与值的等级的柱,并产生一个列称为正,其值为True如果级的值是阳性和假阴性,如果。

df_usa.head.() 
      grade positive 
Boston -0.30  False 
Chicago -0.16  False 
Detroit -0.19  False 
LA  -0.05  False 
Miami -0.04  False 

则生成柱状图,从而积极的酒吧是蓝色和底片是红色如下: Bar plot for US

现在我想要做的正是这对其他40多个国家的,我有城市的字典中dict_country格式。 我试过如下:

def countryplot(df_country, country, dictname): 
    df_country=pd.DataFrame({country: dictname}) 
    df_country.columns=['grade'] 
    df_country['positive']=df_country['grade']>0 
    ##### Plot 
    plt.subplots_adjust(left=.35) 
    df_country['disc'].plot(kind='barh', 
       color=df_country.positive.map({True:'b', 
              False:'r'), 
    title=country)  
    pylab.savefig('C:\\filepath\\Visuals\\'+country+'.png') 
    return 

当我使用此功能:

countryplot(df_country='df_usa',country="'usa'",dictname='dict_usa') 

我收到以下错误:

ValueError: If using all scalar values, you must pass an index 

我是初学者 - 但非常专门学习Python进行数据分析。任何帮助将不胜感激。

+0

你可以显示'df_country.head()'显示什么? –

+0

你为什么在美国附近有双引号?此外,您不需要在该函数调用中具有变量。你不应该有df_country作为你传递给你的函数的变量,如果你在你的函数中创建它的话...... – mauve

+0

Spandan - 我已经添加了更多信息来回答你的问题。谢谢淡紫色。好决定!我已经把它拿出来了。谢谢! –

回答

1

我在这里。感谢所有的指针。这个工程:

def countryplot(country,dictname): 
    df_country=pd.DataFrame({country: dictname}) 
    df_country.columns=['grade'] 
    df_country['positive']=df_country['grade']>0 
    ##### Plot 
    plt.subplots_adjust(left=.35) 
    df_country['grade'].plot(kind='barh', 
       color=df_country.positive.map({True:'b', 
              False:'r'}), 
    title=country)  
    pylab.savefig('C:\\filepath\\Visuals\\test'+country+'.png') 
return 

countryplot(country="'usa'",dictname=dict_usa)