假设我有以下内容:
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
对单个列起作用并返回一个系列)。
首先,切片 df
(第 1 步),然后删除这些列(第 2 步)。
df2 = df[['c', 'd']].copy()
df = df.drop(['c', 'd'], axis=1)
这是使用 pd.concat
的单行版本:
df2 = pd.concat([df.pop(x) for x in ['c', 'd']], axis=1)
这仍然是一个两步过程,但您是在一行中完成的。
df
a b
0 0 0
1 1 1
df2
c d
0 0 0
1 1 1
话虽如此,我认为允许 pop
采取类似列表的列标题是有值(value)的,适本地返回弹出列的 DataFrame。这将为 GitHub 提出一个很好的功能请求,假设有人有时间写一篇。
关于python - 如何将 Pandas 数据框中的多列弹出到新的数据框中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49329569/