纠错:读取Excel 2007文件中的数据,统计所有演员的参演电影信息。

假设有个Excel 2007文件“电影导演演员.xlsx”,其中有三列分别为电影名称、导演和演员列表(同一个电影可能会有多个演员,每个演员姓名之间使用逗号分隔),现在要求统计每个演员的参演电影分别是哪些。

这是网上搜到的代码;

import openpyxl
from openpyxl import Workbook
def getActors(filename):
    actors = dict()
    wb = openpyxl.load_workbook(filename)
    ws = wb.worksheets[0]
    for index, row in enumerate(ws.rows):
        if index == 0:
            continue
        filmName, actor = row[0].value, row[2].value.split(',')
        for a in actor:
            actors[a] = actors.get(a, set())
            actors[a].add(filmName)
    return actors
actors = getActors('电影导演演员.xlsx')
actors = sorted(actors.items(),key=lambda x:int(x[0][2:]))
for item in actors:
    print(item)

运行后出现错误

ValueError: invalid literal for int() with base 10: '1,演员2,演员3,演员4'

请问是什么原因

提供个思路不用写这么多:

1 先读取数据

2 读取后的数据对演员分列, 生成很多新的列

3 分列后的数据用pd.melt() 宽边转窄表

4 数据透视, 统计每个演员参演的电影

主要的代码:

# 导入工具包
import pandas as pd
import numpy as np


# 读取数据
data = pd.read_csv('路径')
data.columns=['电影名称','导演','主演']

data_zy = data['主演'].str.split(',',expand=True)
data2 = pd.concat([data['电影名称'],data_zy],axis=1)
data3 = pd.melt(data2,id_vars='电影名称')
data3.drop('variable',axis=1,inplace=True)
data3.columns= ['电影名称','主演']

result3 = data3.groupby('主演')['电影名称'].count().sort_values(ascending=False).reset_index()