在DataFrame中添加一个空列表的列
在DataFrame中添加一个空列表的列
与这个问题类似如何向数据框添加一个空列?,我想知道向DataFrame添加一个空列表列的最佳方法。
我要做的是初始化一个列,然后在迭代行时处理其中一些行,然后在这个新列中添加一个填充的列表以替换初始化的值。
例如,如果下面是我的初始DataFrame:
df = pd.DataFrame(d = {'a': [1,2,3], 'b': [5,6,7]}) # 示例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的项目序列,因此失败。
如果我尝试将一个列表分配给一个位置,将新列初始化为None
或NaN
时,我会遇到以下问题。
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
初始化的字段?
如果没有,那么初始化一个带有空列表的新列的最佳方法是什么?