将空列表的列添加到DataFrame

问题描述 投票:26回答:3

类似于此问题How to add an empty column to a dataframe?,我有兴趣了解向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初始化字段?

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

类似于此问题,如何向数据框添加空列?,我有兴趣了解向数据框添加空列表列的最佳方法。我想做的基本上是...

python pandas
3个回答
27
投票

另一种方法是使用np.empty


9
投票

我为接受的答案中的所有三种方法计时,最快的一种花费了我的机器216毫秒。但是,这只花了28毫秒:


0
投票

规范解:列表理解,df['e5'] = [set()] * len(df)map

© www.soinside.com 2019 - 2024. All rights reserved.