2017-08-08 38 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)