首页 > 解决方案 > 循环遍历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个数据框不同?我的意思是dfn4dfs['dfn4']

标签: pythonpandas

解决方案


这些行会出现问题:

data2 = dfs[df].join(cat_list)
dfs[df] = data2

pd.DataFrame.join不是就地操作(也不是就地使用)。您正在为变量分配一个副本data2,然后分配data2dfs[df].

这些操作不会更新您的原始数据框dfn4。如果你想这样做,你必须明确地这样做。但是使用字典的全部目的是避免显式命名的数据帧。坚持字典。

如果您需要对旧版本的数据帧集合进行快照,请获取字典的深层副本。例如:

import copy

dfs = {'dfn4':dfn4, 'dfn4_99':dfn4_99, 'dfn4_100':dfn4_100, 'dfn4_1000':dfn4_1000}
dfs_original = copy.deepcopy(dfs)

推荐阅读