已解决ValueError: Length mismatch: Expected axis has 2 elements, new values have 3 elements
报错问题
粉丝群里面的一个小伙伴遇到问题跑来私信我,想用pandas ,但是发生了报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决了,顺便记录一下希望可以帮助到更多遇到这个bug不会解决的小伙伴)如下所示:
import pymysql
import pandas as pd
# 读取tags文件
tags_df = pd.read_csv('data/tags.csv')
# 读取ratings文件
ratings_df = pd.read_csv('data/ratings.csv')
# 合并tags和ratings文件
merged_df = pd.merge(tags_df, ratings_df, on=['userId', 'movieId', 'timestamp'], how='outer')
# 读取movies文件
movies_df = pd.read_csv('data/movies.csv')
# 合并merged_df和movies文件
merged_df = pd.merge(merged_df, movies_df, on='movieId', how='outer')
# 计算每部电影的平均得分和投票次数
movie_stats = merged_df.groupby('title')['rating'].agg(['mean', 'count'])
# 重置列名
movie_stats.columns = ['title', 'average_rating', 'num_votes']
# 重置索引
movie_stats = movie_stats.reset_index(drop=True)
# 按投票次数的倒序排序
popular_movies = movie_stats.sort_values('num_votes', ascending=False)
# 连接MySQL数据库
conn = pymysql.connect()
# 创建游标
cursor = conn.cursor()
# 创建表格popular_movies
create_table_sql = '''
CREATE TABLE popular_movies (
id INT(11) NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
average_rating FLOAT(2) NOT NULL,
num_votes INT(11) NOT NULL,
PRIMARY KEY (id)
);
'''
cursor.execute(create_table_sql)
# 插入数据
for i in range(len(popular_movies)):
title = popular_movies.iloc[i]['title']
average_rating = popular_movies.iloc[i]['average_rating']
num_votes = popular_movies.iloc[i]['num_votes']
insert_sql = "INSERT INTO popular_movies ['title','average_rating', 'num_votes'] VALUES ['%s', '%f', '%d']"%[title,average_rating,num_votes]
cursor.execute(insert_sql)
# 提交更改
conn.commit()
# 关闭游标和连接
cursor.close()
conn.close()
报错信息内容截图如下所示:
报错翻译
报错信息内容翻译如下所示:
值错误:长度不匹配:期望的轴有2个元素,新值有3个元素
报错原因
报错原因:
这个报错通常是由于您正在尝试将不同长度的数据分配给pandas DataFrame中的列引起的。
小伙伴们按下面的解决方法解决即可!!!
解决方法
这个报错通常是由于您正在尝试将不同长度的数据分配给pandas DataFrame中的列引起的。您可以尝试以下步骤:
-
检查您正在使用的数据的长度是否正确。如果您使用的数据长度不同,请确保它们都具有相同的长度。
-
确保您正在将正确的数据分配给正确的列。检查您的代码,确保您正在正确地设置DataFrame的列。
-
如果您正在使用pandas的assign()函数来设置DataFrame的列,请确保您的代码确地设置了列的名称和值。例如,如果您正在使用以下代码设置DataFrame的列:
df = df.assign(new_column=[1, 2, 3])
确保new_column是DataFrame中已经存在的列的名称。如果您想要创建一个新列,请使用以下代码:
df['new_column'] = [1, 2, 3]
-
如果您仍然无法解决问题,请检查您的代码中是否存在其他语法或逻辑错误,并尝试在其他环境中运行代码,例如Jupyter Notebook或Python解释器。
如果以上步骤均未能解决问题,请尝试在pandas的官方社区中搜索类似的问题,并寻求帮助。
以上是此问题报错原因的解决方法,欢迎评论区留言讨论是否能解决,如果有用欢迎点赞收藏文章谢谢支持,博主才有动力持续记录遇到的问题!!!
千人全栈VIP答疑群联系博主帮忙解决报错
由于博主时间精力有限,每天私信人数太多,没办法每个粉丝都及时回复,所以优先回复VIP粉丝,可以通过订阅限时9.9付费专栏《100天精通Python从入门到就业》进入千人全栈VIP答疑群,获得优先解答机会(代码指导、远程服务),白嫖80G学习资料大礼包,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html
-
优点:作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会),此专栏文章是专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试!
-
专栏福利:简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等
-
注意:如果希望得到及时回复,和大佬们交流学习,订阅专栏后私信博主进千人VIP答疑群