首页 > 解决方案 > 如何解决'发生异常:TypeError coercing to Unicode: need string or buffer, tuple found' in Python

问题描述

我正在尝试从匹配数据集中计算团队的平均目标,并提出以下错误 - '发生异常:TypeError coercing to Unicode: need string or buffer, tuple found ' My code is;

matches = open('matches.csv', 'r')
data_read = csv.reader(matches, delimiter = ',')
matches = []
for row in data_read:
    matches.append((row[0], row[1], row[2], row[3]))

 team=['Bandari','Chemelil','Gor Mahia','Kakamega Homeboyz','Kariobangi Sharks','Kenya CB',
 'Leopards','Mathare Utd.','Mount Kenya United', 'Nzoia Sugar','Posta Rangers','Sofapaka',
 'Sony Sugar','Tusker','Ulinzi Stars','Vihiga United', 'Western Stima', 'Zoo']

results=[]
for file in matches:
    avgs=[]
    **for object in team:**
        goalsscored=0
        with open(file) as f:
            reader=csv.DictReader(f)
            rows=[ row for row in reader if row['Home_Team']==object]

            for row in rows:
                for rows in row[HTgoals]:
                    goalsscored=goalsscored + int(row['HTgoals'])


        with open(file) as f:
            reader=csv.DictReader(f)
            rows2=[ row for row in reader if row['Away_Team']==object]

            for row in rows2:
                for rows2 in row['ATgoals']:
                    goalsscored=goalsscored + int(row['ATgoals'])

            kk=df.apply(pd.value_counts) 
            avgs.append(goalsscored/kk) 
    results.append(avgs)             

我得到的错误,在双星号包围的行中弹出,是

Exception has occurred: TypeError
coercing to Unicode: need string or buffer, tuple found
  File "C:\Users\HP\PycharmProjects\betapp1\model_1.py", line 28, in <module>
with open(file) as f:
  File "C:\Users\HP\Anaconda2\Lib\runpy.py", line 72, in _run_code
exec code in run_globals
  File "C:\Users\HP\Anaconda2\Lib\runpy.py", line 82, in _run_module_code
mod_name, mod_fname, mod_loader, pkg_name)
  File "C:\Users\HP\Anaconda2\Lib\runpy.py", line 252, in run_path
return _run_module_code(code, init_globals, run_name, path_name)  

我的数据集每行包含 4 个值,主队、客队、主队进球数和客队进球数。下面是一个例子;

Gor Mahia,Tusker,1,0
Mount Kenya United,Zoo,1,0
Sony Sugar,Western Stima,4,0

我希望输出是一个包含球队平均进球数的列表,但我没有得到任何输出

标签: python

解决方案


看起来你的错误在这里:

for file in matches:
    avgs=[]
    for object in team:
        goalsscored=0
        with open(file) as f: # error is here
            reader=csv.DictReader(f)

open函数期望file是一个字符串或文件缓冲区,但它是一个看起来像这样的元组(row[0], row[1], row[2], row[3])。如果您指定您尝试打开的文件名,那么我们可以提供进一步的帮助。


推荐阅读