【问题标题】:Storing Series into a pandas DataFrame cell using apply使用 apply 将 Series 存储到 pandas DataFrame 单元格中
【发布时间】:2019-05-01 23:46:08
【问题描述】:

我有一个返回系列的函数。我使用 apply() 将函数应用于我的 DataFrame,并且我想将生成的 Series 存储到数据框的新列中。例如,

   | 1 |                  2
---+---+------------------------------------
 0 | 1 | <class 'pandas.core.series.Series'>
 1 | 2 | <class 'pandas.core.series.Series'>
 2 | 3 | <class 'pandas.core.series.Series'>

但是,pandas 似乎想扩展系列并将其存储到多个列中,所以我得到一个 ValueError: Wrong number of items passed 3,placement means 1。

import pandas as pd

df = pd.DataFrame({1: [1, 2, 3]})


def f(x):
    return pd.Series(['a', 'b', 'c'])

df[2] = df.apply(f, axis=1)

应该如何处理?

【问题讨论】:

  • 您似乎可以使用 df[2] = [f(x) for x in df[1]] 来做到这一点,但我不确定在数据框的单元格中设置一个系列真的是个好主意。
  • 谢谢 Ben,你的似乎更接近答案,因为它仍然使用 f() 来生成系列,但为什么这是一个坏主意?
  • 在 W-B 的回答下查看@Kyle 的评论。

标签: python python-3.x pandas


【解决方案1】:

我不建议您将series 保存到数据框单元格中,但这是转换为对象的一种方法

df['2']=[pd.Series(['a', 'b', 'c'])]*len(df)

【讨论】:

  • 谢谢 W-B,是否有特殊原因不将系列保存到数据框中?
  • 如果您有对象类型列,您从 pandas 获得的所有优化和优势都将丢失。如果您想对相关列进行逻辑分组,您可以考虑使用多索引作为列名。
  • 谢谢@Kyle,这很有帮助。在这种情况下,需要(或至少想要)将系列存储在数据框中是暂时的,因为它会在稍后转换为其他内容。
  • 那么我建议存储为独立的系列或列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 2012-11-24
  • 2018-01-22
  • 2023-03-11
  • 1970-01-01
  • 2016-12-28
相关资源
最近更新 更多