使用 .concat 创建 pandas 数据框时包含空系列

Posted

技术标签:

【中文标题】使用 .concat 创建 pandas 数据框时包含空系列【英文标题】:Include empty series when creating a pandas dataframe with .concat 【发布时间】:2015-08-11 16:06:47 【问题描述】:

更新:至少从 pandas 0.18.1 版开始,这不再是一个问题。连接空系列不再删除它们,所以这个问题已经过时了。

我想使用 .concat 从系列列表中创建一个 pandas 数据框。问题是,当其中一个系列为空时,它不会包含在结果数据框中,但是当我尝试使用多索引重命名其列时,这会使数据框成为错误的维度。 更新:这是一个例子......

import pandas as pd

sers1 = pd.Series()
sers2 = pd.Series(['a', 'b', 'c'])
df1 = pd.concat([sers1, sers2], axis=1)

这会产生以下数据框:

>>> df1
0    a
1    b
2    c
dtype: object

但我希望它产生这样的结果:

>>> df2
    0  1
0 NaN  a
1 NaN  b
2 NaN  c

如果我在 ser1 中的任何位置放置一个 nan 值,它会执行此操作,但即使我的某些系列完全为空,这似乎也应该是自动实现的。

【问题讨论】:

我快速尝试了一下。如果这不是您要查找的内容,您可能需要发布一些示例数据,以便更清楚地了解您想要做什么。 你能提供一个小例子吗?可能的解决方案是使用所有系列名称的构造索引重新索引结果数据帧。 【参考方案1】:

为级别传递参数就可以了。这是一个例子。一、方法不对:

import pandas as pd
ser1 = pd.Series()
ser2 = pd.Series([1, 2, 3])
list_of_series = [ser1, ser2, ser1]
df = pd.concat(list_of_series, axis=1)

产生这个:

>>> df
   0
0  1
1  2
2  3

但是如果我们给levels参数添加一些标签,它也会包含所有的空系列:

import pandas as pd
ser1 = pd.Series()
ser2 = pd.Series([1, 2, 3])
list_of_series = [ser1, ser2, ser1]
labels = range(len(list_of_series))
df = pd.concat(list_of_series, levels=labels, axis=1)

生成所需的数据帧:

>>> df
    0  1   2
0 NaN  1 NaN
1 NaN  2 NaN
2 NaN  3 NaN

【讨论】:

另外,这似乎是一个版本问题。在带有熊猫版本 0.12.0 的 Windows 8.1 上,我从来没有遇到过空系列被丢弃的问题。但在 linux 上使用 pandas 版本 0.15.2 我做到了。

以上是关于使用 .concat 创建 pandas 数据框时包含空系列的主要内容,如果未能解决你的问题,请参考以下文章

我的代码在 pandas 中运行正常,但在 modin 中没有

pandas.concat() 不填充列

将dict保存为pandas数据框时如何保持排序?

使用索引日期时间从 pandas 数据帧创建 json

为啥 Pandas 串联 (pandas.concat) 的内存效率如此之低?

`pd.concat` 与 `join=='inner'` 不会产生 pandas 数据帧的交集