附加列在 pandas DataFrame 中产生 NaN

Posted

技术标签:

【中文标题】附加列在 pandas DataFrame 中产生 NaN【英文标题】:appending columns produces NaN in pandas DataFrame 【发布时间】:2012-08-14 21:46:45 【问题描述】:

我需要迭代地将列添加到 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】:

您首先创建 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 的想法是一种更好的方法。

【讨论】:

以上是关于附加列在 pandas DataFrame 中产生 NaN的主要内容,如果未能解决你的问题,请参考以下文章

根据日期列在pandas Dataframe中插入行

Pandas Left Merge with xlsx with CSV 在输出中产生空值列

pandas使用query函数查询dataframe中某一个数据列在指定数据范围的数据行(rows where value is between two values in dataframe)

可感知 tz 的日期时间序列在 pandas 系列应用(lambda)操作中产生基于 UTC 的 .date() 输出

pandas中的axis参数(看其他人的博客中产生的疑问点,用自己的话解析出来)

有没有办法查看哪一行代码在 python 中产生警告消息?