用for循环将pandas DataFrame列存入字典仅保留最后一列问题求助
问题根源
循环内的赋值逻辑错误,每一轮循环都执行dfDic = {featureName:df.iloc[:,[colCounter]]},相当于每次都生成一个仅包含当前列键值对的新字典,再覆盖掉原来的dfDic变量,最终循环结束后只保留了最后一轮生成的字典,所以只有最后一列的内容。
修复方法
方案1:修改原有循环逻辑
不覆盖整个字典,改为给字典新增键值对即可:
#Names of columns in the dataframe featureList = df.columns print(featureList) #number of columns in the dataframe noOfCol = len(df.axes[1]) print(noOfCol) #number of rows noOfRow = len(df.axes[0]) print(noOfRow) #creating a dictionary for storing all the cols separately dfDic = dict() colCounter = 0 for featureName in featureList: # 改为给字典新增键值对,而非重新赋值整个字典 dfDic[featureName] = df.iloc[:,[colCounter]] colCounter +=1 print(dfDic)
方案2:更简洁的实现方式
无需手动维护计数器,直接通过字典推导式实现,代码更简洁不易出错:
如果需要和原有代码保持一致,存储单列DataFrame格式的值:
dfDic = {col: df[[col]] for col in df.columns}
如果需要存储Series格式的列,可直接调用pandas内置方法:
dfDic = df.to_dict('series')
如果需要存储列表格式的列值:
dfDic = df.to_dict('list')
内容的提问来源于stack exchange,提问作者Saba
相关产品推荐
相关产品推荐

