课程作业中DataFrame仅显示表头问题求助
问题分析与修正
你的代码存在几个关键错误,导致所有数据行被删除,最终只剩表头:
错误1:inplace=True 与赋值操作冲突
使用inplace=True时,Pandas方法会直接修改原DataFrame,返回值为None。若同时给列赋值,会把整列设为None,后续dropna()会删除所有行。比如:
ds['Size'] = ds['Size'].replace("Varies with Device", np.nan, inplace = True) ds['Type']= ds['Type'].replace("Free", np.nan, inplace = True)
正确做法是二选一:要么保留inplace=True不赋值,要么去掉inplace=True保留赋值:
# 方式一:保留赋值,去掉inplace ds['Size'] = ds['Size'].replace("Varies with Device", np.nan) # 方式二:保留inplace,不赋值 ds['Type'].replace("Free", np.nan, inplace=True)
错误2:Rating筛选逻辑完全颠倒
作业要求删除Rating不在1-5范围内的行,但你当前代码是找出符合1-5的行索引并删除,等于留下了不符合条件的行(原始数据中Rating基本都在1-5区间,这一步后数据已所剩无几)。正确逻辑是找出不符合条件的索引再删除:
# 定位Rating不在1-5的行索引 indexrating = ds[(ds['Rating'] < 1) | (ds['Rating'] > 5)].index ds.drop(indexrating, inplace=True)
错误3:多余的headers代码
你创建的headers DataFrame从未使用,完全可以删除,不影响数据处理逻辑。
修正后的完整代码
import pandas as pd import numpy as np # 加载数据集 ds = pd.read_csv('googleplaystore.csv') # 处理Size列:替换特殊值为NaN ds['Size'] = ds['Size'].replace("Varies with Device", np.nan) # 删除含空值的记录 ds = ds.dropna() # 移除Size列的M、K后缀并转换为数值型 ds['Size'] = ds['Size'].str.replace("M", "", regex=True) ds['Size'] = ds['Size'].str.replace("k", "", regex=True) ds['Size'] = ds['Size'].astype(float) # 处理Installs列:移除+号并转整数 ds['Installs'] = ds['Installs'].str.replace("+", '', regex=True) ds['Installs'] = ds['Installs'].astype(int) # 转换Reviews为浮点型 ds['Reviews'] = ds['Reviews'].astype(float) # 处理Price列:移除$符号并转数值型 ds['Price'] = ds['Price'].str.replace("$", "", regex=True) ds['Price'] = ds['Price'].astype(float) # 删除Rating不在1-5范围内的行 indexrating = ds[(ds['Rating'] < 1) | (ds['Rating'] > 5)].index ds.drop(indexrating, inplace=True) # 删除Type为Free的行(直接用布尔索引更高效) ds = ds[ds['Type'] != 'Free'] # 显示处理后的DataFrame display(ds)
处理Type列时,直接用布尔索引ds['Type'] != 'Free'筛选,比替换为NaN再删除空值更直观高效。
内容的提问来源于stack exchange,提问作者jmlabbe158
相关产品推荐
相关产品推荐

