首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >循环通过python数据帧的字典问题

循环通过python数据帧的字典问题
EN

Stack Overflow用户
提问于 2018-07-30 04:06:43
回答 1查看 35关注 0票数 0

我是Python的新手,遇到了数据帧问题。这就是它:

我有4个数据帧,所有5列都是分类的:

代码语言:javascript
复制
print(dfn4.shape)

print(dfn4_99.shape)

print(dfn4_100.shape)

print(dfn4_1000.shape)

代码语言:javascript
复制
(37524, 5)

(921, 5)

(36603, 5)

(25000, 5)

我用它们创建了一个字典:

代码语言:javascript
复制
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)

然后,我从分类变量中创建虚拟变量:

代码语言:javascript
复制
 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

然后我再次检查它们的形状:

代码语言:javascript
复制
for df in dfl:
    print(df, " = ",dfs[df].shape) 

dfn4  =  (37524, 2348)

dfn4_99  =  (921, 442)

dfn4_100  =  (36603, 2328)

dfn4_1000  =  (25000, 2002)

这是可以的。但当我检查其中一个的形状时,它看起来没有变化:

代码语言:javascript
复制
dfn4.shape

(37524, 5)

然而:

代码语言:javascript
复制
dfs['dfn4'].shape

(37524, 2343)

为什么两个数据帧是不同的?我是说dfn4dfs['dfn4']

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-30 04:14:21

以下代码行出现问题:

代码语言:javascript
复制
data2 = dfs[df].join(cat_list)
dfs[df] = data2

pd.DataFrame.join不是就地操作(也不会像就地操作一样使用)。您将一个副本分配给变量data2,然后将data2分配给dfs[df]

这些操作不会更新原始数据帧dfn4。如果您希望这样做,您必须显式地这样做。但使用字典的全部意义在于避免显式命名的数据帧。坚持使用字典。

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

代码语言:javascript
复制
import copy

dfs = {'dfn4':dfn4, 'dfn4_99':dfn4_99, 'dfn4_100':dfn4_100, 'dfn4_1000':dfn4_1000}
dfs_original = copy.deepcopy(dfs)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51584124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档