【问题标题】:How to keep one single column as a dataframe如何将一列保留为数据框
【发布时间】:2017-01-26 02:32:07
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: python pandas sklearn-pandas


    【解决方案1】:

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

    df['col3'].to_frame()
    

    【讨论】:

    • 不错。代码比看起来很老套的reset_index() 更清晰。
    【解决方案2】:

    如果我做一个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 将 Series 转换为 DataFrame。所以在这里,你也可以使用:

    In [44]: df['a'].reset_index()
    Out[44]: 
       index  a
    0      0  1
    1      1  2
    

    【讨论】:

    • 非常感谢。但看起来第二个 on 返回 pandas.core.series.Series。
    • @Prana 当然。剩下的两个选项(删除那个)对你有用吗?
    猜你喜欢
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2015-09-17
    • 1970-01-01
    • 2020-06-10
    • 2017-09-19
    相关资源
    最近更新 更多