3

我有 20 列和一个索引的数据框。

它的形状类似于 (100, 20)。

我想从此数据帧中分割第三列,但希望将结果保留为 (100,1) 的数据帧。

  1. 如果我做 a v = df['col3'],我会得到一个 Series (我不想要)
  2. 如果我做 av =df[df['col3']!=0]然后v.drop(label=[list of 19 columns], axis = 1)--- 我得到我想要的 [那是 df(100,1)] 但我必须

(a) 写一个不必要的 != 条件(我想避免)和

(b) 我必须写一个包含 19 个列名的长列表。

应该有一种更好、更清洁的方式来做我想做的事情。

4

2 回答 2

3

如果我做 a v = df['col3'],我会得到一个 Series (我不想要)

如果你使用df[cols], where colsis a list,你会得到一个 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

最后,请注意,您始终可以将 Series 转换为 DataFrame reset_index。所以在这里,你也可以使用:

In [44]: df['a'].reset_index()
Out[44]: 
   index  a
0      0  1
1      1  2
于 2016-09-18T08:32:00.407 回答
3

另一个方便的技巧是to_frame()

df['col3'].to_frame()
于 2016-09-18T09:03:01.290 回答