【问题标题】:Converting a dataframe of 2 columns to a series of 2 columns in Python在 Python 中将 2 列的数据框转换为一系列 2 列
【发布时间】:2019-01-23 04:12:18
【问题描述】:

我正在尝试处理一些时间序列数据,并且对 pandas 数据框很陌生。我有一个包含两列的数据框,如下所示:

+---+-----------------------+-------+--+
|   |           0           |   1   |  |
+---+-----------------------+-------+--+
| 1 | 2018-08-02 23:00:00   | 456.8 |  |
| 2 | 2018-08-02 23:01:00   | 457.9 |  |
+---+-----------------------+-------+--+

我正在尝试将其转换为具有两列的系列,就像它在数据框中一样。如何做呢?因为 pd.series 正在将数据框转换为一系列一列。

【问题讨论】:

  • 你能解释一下你想象的“有两列的系列”会是什么样子吗?
  • 如下所示:数据类型需要是系列:Index 0 2018-08-02 23:00:00 456.8 2018-08-02 23:01:00 457.9 对不起,我无法发表评论正确

标签: python pandas


【解决方案1】:

作为stated in comments 使用“pd.Series(df.col1, df.col2) 产生一个带有 NaN 的系列”。原因是 Series 将被重新索引,对象作为 index 参数传递。 Current dev docs澄清:

如果 data 是 dict-like 并且 index 是 None,那么 data 中的键被用作索引。如果索引不是 None,则使用索引值重新索引生成的 Series。

为了避免重新索引,可以这样做:

pd.Series(df[0].values, index=df[1])

由于df[0].valuespd.array,而不是类似字典的pd.Series,因此不会重新索引任何内容,df[1] 将按原样设置为索引。

【讨论】:

    【解决方案2】:

    没有两列的熊猫系列。我的猜测是你想生成一个以列 0 为索引和列 1 为值的系列。您可以通过设置索引并提取感兴趣的列来获得它(假设您的 DataFrame 在df):

    df.set_index(0)[1]
    

    【讨论】:

    • pd.Series(df[0], df[1])(如果需要,甚至可以是pd.to_datetime(df[1])
    • 使用 pd.Series(df.col1, df.col2) 会在此处生成带有 NaN 的系列。 `pd.Series(df.col1.values, df.col2)' 有效 - 只是失去了 Name 属性。虽然 pd.Series(df.col1) 不产生 NaN ......似乎有问题(pandas 版本 1.0.4,PY3.7)
    • 这不是错误的,而是有意的。当前的开发文档阐明了这种行为:如果数据类似于 dict 并且索引为 None,则数据中的键用作索引。如果索引不是 None,则使用索引值重新索引生成的 Series。 pandas.pydata.org/docs/dev/reference/api/…
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2021-05-12
    • 2019-02-19
    • 2023-03-10
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多