我的数据框有20列和一个索引。
它的形状类似于(100,20)。
我想从此数据帧中切割第3列,但希望将结果保留为(100,1)的数据帧。
v = df['col3']
,我会收到一个系列(我不想要)v =df[df['col3']!=0]
然后v.drop(label=[list of 19 columns], axis = 1)
---我得到了我想要的东西[那是一个df(100,1)]但是我必须(a)写一个不必要的!=条件(我想避免)和
(b)我必须写一个包含19个列名的长列表。
应该有一种更好,更清洁的方式来做我想要实现的目标。
答案 0 :(得分:3)
如果我做
v = df['col3']
,我会收到一个系列(我不想要)
如果您使用df[cols]
,其中cols
是一个列表,您将获得一个DataFrame(不是系列)。这包括它是由单个项目组成的列表的情况。因此,您可以使用df[['col3']]
。
例如:
In [33]: df = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
这给出了一个系列:
In [35]: df['a']
Out[35]:
0 1
1 2
Name: a, dtype: int64
这给出了一个DataFrame:
In [36]: df[['a']]
Out[36]:
a
0 1
1 2
最后,请注意,您始终可以使用reset_index
将系列转换为DataFrame。所以在这里,你也可以使用:
In [44]: df['a'].reset_index()
Out[44]:
index a
0 0 1
1 1 2
答案 1 :(得分:2)
另一个方便的技巧是to_frame()
df['col3'].to_frame()