假设我有以下内容:
df = pd.DataFrame({'a':range(2), 'b':range(2), 'c':range(2), 'd':range(2)})
我想从数据帧“弹出”两列(‘c’和’d’)到一个新的数据帧,在原始df中留下’a’和’b’.以下不起作用:
df2 = df.pop(['c', 'd'])
这是我的错误:
TypeError: '['c', 'd']' is an invalid key
有没有人知道一个快速,优雅的解决方案,除了做以下?
df2 = df[['c', 'd']]
df3 = df[['a', 'b']]
我知道上面的代码输入并不是那么繁琐,但这就是DataFrame.pop发明的原因 – 在数据库中弹出一列时为我们省了一步.
最佳答案 这将是一个两步过程(你不能解决这个问题,因为正如所提到的,pop适用于单个列并返回一个Series).
首先,切片df(步骤1),然后删除这些列(步骤2).
df2 = df[['c', 'd']].copy()
del df[['c', 'd']] # df.drop(['c', 'd'], axis=1, inplace=True)
这是使用pd.concat的丑陋替代方案:
df2 = pd.concat([df.pop(x) for x in ['c', 'd']], 1)
这仍然是一个两步过程,但你是在一行中完成的.
df
a b
0 0 0
1 1 1
df2
c d
0 0 0
1 1 1