我有一段代码需要在我的数据中为每个国家/地区运行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,其中包含一个等级值列,并生成一个名为positive的列,如果等级的值为正,则为True,如果为负,则为False。
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
现在我想为其他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 :(得分: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)