追加列会在pandas DataFrame中生成NaN

时间:2012-08-18 22:50:27

标签: python data-mining pandas

我需要迭代地将列添加到DataFrame对象。这是一个简化版本:

>>> x=DataFrame()
>>> for i in 'ps':
...  x = x.append(DataFrame({i:[3,4]}))
... 
>>> x
    p   s
0   3 NaN
1   4 NaN
0 NaN   3
1 NaN   4

我该怎么办才能获得:

    p   s
 0  3   3
 1  4   4

1 个答案:

答案 0 :(得分:2)

首先创建dict的想法可能是最好的方法:

>>> from pandas import *
>>> DataFrame({c: [1,2] for c in 'sp'})
   p  s
0  1  1
1  2  2

(这里使用字典理解,在Python 2.7中提供)。但是,为了完整起见,您可以 - 效率低下 - 使用joinconcat来逐列方法:

>>> df = DataFrame()
>>> for c in 'sp':
...     df = concat([df, DataFrame({c: [1,2]})], axis=1)
... 
>>> print df
   s  p
0  1  1
1  2  2
>>> 
>>> df = DataFrame()
>>> for c in 'sp':
...     df = df.join(DataFrame({c: [1,2]}), how='outer')
... 
>>> print df
   s  p
0  1  1
1  2  2

[你可以看到列顺序的不同。]但是你构建dict然后从构造的dict构造DataFrame的想法是一个更好的方法。