我是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)
为什么两个数据帧是不同的?我是说dfn4
和dfs['dfn4']
发布于 2018-07-30 04:14:21
以下代码行出现问题:
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)
https://stackoverflow.com/questions/51584124
复制相似问题