python - 循环遍历python数据框问题的字典
问题描述
我是 Python 新手,遇到了数据框问题。这里是:
我有 4 个数据框,所有 5 列都是分类的:
print(dfn4.shape)
print(dfn4_99.shape)
print(dfn4_100.shape)
print(dfn4_1000.shape)
(37524, 5)
(921, 5)
(36603, 5)
(25000, 5)
我用他们创建了一本字典:
dfl = ['dfn4', 'dfn4_99', 'dfn4_100', 'dfn4_1000']
dfs = {'dfn4':dfn4, 'dfn4_99':dfn4_99, 'dfn4_100':dfn4_100, 'dfn4_1000':dfn4_1000}
for df in dfl:
print(df, " = ",dfs[df].shape)
dfn4 = (37524, 5)
dfn4_99 = (921, 5)
dfn4_100 = (36603, 5)
dfn4_1000 = (25000, 5)
然后我从分类变量创建虚拟变量:
cat_vars=['caller_id'
,'u_contact_location'
,'category'
,'subcategory'
,'u_incident_type']
for df in dfl:
for var in cat_vars:
cat_list = pd.get_dummies(dfs[df][var], prefix=var)
data2=dfs[df].join(cat_list)
dfs[df]=data2
然后我再次检查它们的形状:
for df in dfl:
print(df, " = ",dfs[df].shape)
dfn4 = (37524, 2348)
dfn4_99 = (921, 442)
dfn4_100 = (36603, 2328)
dfn4_1000 = (25000, 2002)
没关系。但是当我检查其中一个的形状时,它看起来没有变化:
dfn4.shape
(37524, 5)
但是:
dfs['dfn4'].shape
(37524, 2343)
为什么2个数据框不同?我的意思是dfn4
和dfs['dfn4']
解决方案
这些行会出现问题:
data2 = dfs[df].join(cat_list)
dfs[df] = data2
pd.DataFrame.join
不是就地操作(也不是就地使用)。您正在为变量分配一个副本data2
,然后分配data2
给dfs[df]
.
这些操作不会更新您的原始数据框dfn4
。如果你想这样做,你必须明确地这样做。但是使用字典的全部目的是避免显式命名的数据帧。坚持字典。
如果您需要对旧版本的数据帧集合进行快照,请获取字典的深层副本。例如:
import copy
dfs = {'dfn4':dfn4, 'dfn4_99':dfn4_99, 'dfn4_100':dfn4_100, 'dfn4_1000':dfn4_1000}
dfs_original = copy.deepcopy(dfs)
推荐阅读
- java - 将 Arraylist 保存到文本文档的单独行
- javascript - 任何人都可以使用 async/await 将回调转换为 Promise 并将原型函数转换为普通函数吗
- ios - CoreData 与 CloudKit 配置路径
- javascript - JavaScript 中的导出-导入 --- SyntaxError: 不能在模块外使用导入语句
- python - 在列表中的字符串末尾添加感叹号
- python - 如何从scrapy中的函数中获取数据
- azure - Azure 翻译 API 调用正在返回和 40100
- php - 认证问题/困惑
- sql - 如何按类别分隔 SQL 分区:“row_number() over (partition by ...”?
- apache-kafka - Kafka-connect,Bootstrap 代理断开连接