python pandas dataframe:当默认值是可迭代的时,使用默认值创建新列

时间:2018-10-05 11:54:23

标签: python pandas dataframe

我有一个熊猫数据框,如下所示:

In  [1]: import pandas as pd
In  [2]: df = pd.DataFrame([[1,2],[3,4],[5,6]], columns=['a','b'])
In  [3]: print df
Out [3]: 
   a  b
0  1  2
1  3  4
2  5  6

现在,我想添加一个默认值作为字典的新列'c'。结果数据框应如下所示:

   a  b             c
0  1  2  {1: 2, 3: 4}
1  3  4  {1: 2, 3: 4}
2  5  6  {1: 2, 3: 4}

我尝试了以下操作:

df.at[:, 'c'] = {1: 2, 3: 4}
ValueError: Length of values does not match length of index

df['c'] = {1: 2, 3: 4}
ValueError: Must have equal len keys and value when setting with an iterable

这个对我有用

df['c'] = df.apply(lambda x: {1:2, 3:4}, axis=1)

但是看起来很肮脏。 有没有更清洁的方法可以做到这一点?

2 个答案:

答案 0 :(得分:0)

DF中有三行,而字典中只有两个元素,请执行以下操作:

c = {0:1,1:1,2:2}
df['c'] = c

输出:

 a  b  c
0  1  2  0
1  3  4  1
2  5  6  2

要在数据框中重复使用相同的字典,您需要创建此类字典的列表

c = {1:2,3:4}
c = [c]*3
df['c'] = c

输出

 a  b             c
0  1  2  {1: 2, 3: 4}
1  3  4  {1: 2, 3: 4}
2  5  6  {1: 2, 3: 4}

答案 1 :(得分:0)

有可能但不建议在DataFrame列中存储字典,因为不能使用所有矢量化的熊猫函数:

df['c'] = [{1: 2, 3: 4} for x in np.arange(len(df))]
print (df)
   a  b             c
0  1  2  {1: 2, 3: 4}
1  3  4  {1: 2, 3: 4}
2  5  6  {1: 2, 3: 4}