当前位置: 首页 > 面试题库 >

将空列表列添加到DataFrame

温凯
2023-03-14
问题内容

与此问题类似,如何将空列添加到数据框?,我想知道向DataFrame添加一列空列表的最佳方法。

我想要做的基本上是初始化一列,然后遍历行以处理其中的一些行,然后在此新列中添加填充列表以替换初始化的值。

例如,如果下面是我的初始DataFrame:

df = pd.DataFrame(d = {'a': [1,2,3], 'b': [5,6,7]}) # Sample DataFrame

>>> df
   a  b
0  1  5
1  2  6
2  3  7

然后,我最终希望得到这样的结果,其中每一行都经过单独处理(显示了示例结果):

>>> df
   a  b          c
0  1  5     [5, 6]
1  2  6     [9, 0]
2  3  7  [1, 2, 3]

当然,如果我尝试像df['e'] = []使用其他任何常量一样进行初始化,它会认为我正在尝试添加长度为0的项目序列,因此失败。

如果我尝试将新列初始化为NoneNaN,则在尝试将列表分配给某个位置时遇到以下问题。

df['d'] = None

>>> df
   a  b     d
0  1  5  None
1  2  6  None
2  3  7  None

问题1(如果我可以采用这种方法,那将是完美的!也许我没想到一些琐碎的事情):

>>> df.loc[0,'d'] = [1,3]

...
ValueError: Must have equal len keys and value when setting with an iterable

问题2(此方法有效,但并非没有警告,因为不能保证它可以按预期工作):

>>> df['d'][0] = [1,3]

C:\Python27\Scripts\ipython:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

因此,我诉诸于用空列表初始化并根据需要扩展它们。我可以想到几种方法来进行这种初始化,但是还有更简单的方法吗?

方法1:

df['empty_lists1'] = [list() for x in range(len(df.index))]

>>> df
   a  b   empty_lists1
0  1  5             []
1  2  6             []
2  3  7             []

方法2:

 df['empty_lists2'] = df.apply(lambda x: [], axis=1)

>>> df
   a  b   empty_lists1   empty_lists2
0  1  5             []             []
1  2  6             []             []
2  3  7             []             []

问题摘要:

在问题1中是否可以解决任何小的语法更改,从而可以将列表分配给None/NaN初始化字段?

如果不是,那么用空列表初始化新列的最佳方法是什么?


问题答案:

另一种方法是使用np.empty

df['empty_list'] = np.empty((len(df), 0)).tolist()

.index尝试查找时len,您也可以关闭“方法1” df

df['empty_list'] = [[] for _ in range(len(df))]

事实证明,np.empty速度更快…

In [1]: import pandas as pd

In [2]: df = pd.DataFrame(pd.np.random.rand(1000000, 5))

In [3]: timeit df['empty1'] = pd.np.empty((len(df), 0)).tolist()
10 loops, best of 3: 127 ms per loop

In [4]: timeit df['empty2'] = [[] for _ in range(len(df))]
10 loops, best of 3: 193 ms per loop

In [5]: timeit df['empty3'] = df.apply(lambda x: [], axis=1)
1 loops, best of 3: 5.89 s per loop


 类似资料:
  • 问题内容: 我使用SQLAlchemy制作了一个表,却忘记添加列。我基本上想这样做: 这是什么语法?我在文档中找不到它。 问题答案: 这称为数据库迁移(SQLAlchemy不支持即开即用的迁移)。您可以考虑使用sqlalchemy- migrate 在这种情况下提供帮助,也可以仅通过选择的数据库的命令行实用程序,

  • < code>list_of_lists=[[1,2,3],[4,5,6]] < br > < code > list _ to _ add =[" A "," B "," C"] 我希望结果是list_of_lists会变成: 谢谢!

  • 很容易将列表列表转换为数据帧: 但是我如何将df转换回列表列表呢?

  • 问题内容: 如何将多个空列添加到列表中的? 我可以: 但是我不能: 问题答案: 我使用的是DataFrame: 因此,通过传递包含原始df的列表以及包含您要添加的列的新列表,这将返回包含其他列的新df。 警告:请参阅其他答案和/或评论讨论中有关性能的讨论。在性能至关重要的情况下可能更可取。 例: 您可以df.reindex用来添加新列: reindex 将返回一个新的DataFrame,其列按列出

  • 在有趣的功能中,当我将列表添加到其他列表时,它正在添加空列表,我可以找到原因有人可以帮助我这个程序是关于查找给定数组的不同组合

  • 我有麻烦了。 问题是我试图将一个对象添加到这个对象的列表中。这个列表是一个属性,没有错误,但是当我运行它的时候,它失败了,因为:“NullReferenceException”。听起来合乎逻辑,因为列表的属性是“null”,但我不能声明一个属性,是吗? 她有些代码被剪掉了: [...] [...]