pandas新增列时报'DataFrame' object has no attribute 'map'如何解决?
报错原因
map是pandas Series 独有的方法,你的label变量现在是DataFrame类型,自然没有这个属性,才会触发报错。
你代码里的核心问题有两个:
- 重复读取同一个
train.csv文件毫无必要,第一次读取后就可以直接从train_df里提取需要的列 - 你读取的
train.csv本身有多列,就算加了squeeze=True参数,也不会自动转为Series,所以返回的还是DataFrame
修复方案
方案1:直接从已读取的train_df中提取标签列
如果标签本身就是train.csv里的某一列(比如最后一列),直接提取即可:
import pandas as pd # 只需要读取一次csv train_df = pd.read_csv("/content/drive/My Drive/data/HumanActivity/data/train.csv") # 假设标签是train_df的最后一列 label = train_df.iloc[:, -1] label_name = label.map({1: "WALKING", 2:"WALKING_UPSTAIRS", 3:"WALKING_DOWNSTAIRS", 4:"SITTING", 5:"STANDING", 6:"LYING"}) # 把转换好的标签名新增到数据集 train_df["label_name"] = label_name
方案2:确实需要单独读标签文件的情况
如果标签是单独的文件,首先确认你路径写对了(你现在所有读文件路径都是同一个train.csv,大概率是路径写错了,比如标签文件路径应该是y_train.csv/train_labels.txt这类),读取后可以主动转成Series再调用map:
# 读单列文件后主动转Series label = pd.read_csv("你的标签文件正确路径", header=None).squeeze() # 或者取第一列转Series label = pd.read_csv("你的标签文件正确路径", header=None).iloc[:, 0] label_name = label.map({1: "WALKING", 2:"WALKING_UPSTAIRS", 3:"WALKING_DOWNSTAIRS", 4:"SITTING", 5:"STANDING", 6:"LYING"})
内容的提问来源于stack exchange,提问作者kmayutrisna
相关产品推荐
相关产品推荐

