附加列在 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 中可用)。不过,为了完整起见,您可以 - 效率低下 - 使用 join
或 concat
来逐列工作:
>>> 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 Left Merge with xlsx with CSV 在输出中产生空值列
pandas使用query函数查询dataframe中某一个数据列在指定数据范围的数据行(rows where value is between two values in dataframe)
可感知 tz 的日期时间序列在 pandas 系列应用(lambda)操作中产生基于 UTC 的 .date() 输出