我必须在循环中逐列地构建DataFrame,每列都有不同的长度。
我从一个空的DataFrame开始,但我已经知道了列名:
import pandas as pd
df = pd.DataFrame(columns=['g1','g2'])
我的列数据是从另一个DataFrame中提取的Series。让我们在这里创建一些虚构的数据:
s1 = pd.Series(index=[1,2],data=[10,11],name='g1')
s2 = pd.Series(index=[3,4,5],data=[12,13,14],name='g2')
# etc.
请注意,这两个序列具有不同的索引值和不同的长度(并非所有索引值都不同,有些可能重叠)。现在我想进入循环,并在每次迭代时向DataFrame添加一个新列。在循环的and处,我的DataFrame应该如下所示:
Index g1 g2
0 10 12
1 11 13
2 NaN 14
换句话说:
1.索引被扩展以覆盖最大的列,并重置为0..n-1,其中n是所有列的最大尺子
1.每个系列都追加为一个新列,其名称与原始已知列名相同
1.缺失元素为NaN
4条答案
按热度按时间qaxu7uf21#
使用
name
和DataFrame
:输出:
dgenwo3n2#
使用
concat
和Series.reset_index
以及参数drop=True
作为默认索引:定量环溶液:
rqcrx0a63#
基于@Timeless的答案,如果你想更新原始的DataFrame,你可以用途:
或者,作为一行程序:
输出:
wfveoks04#
以下是我找到的两个解决方案:
1.感谢@Timeless。第一个解决方案在循环中构建一个系列列表,然后在最后使用dict构建DataFrame。
1.感谢
jezrael
,他使用了concat
而不是merge
,这是我最初尝试使用的。在这种情况下,我们从一个空的DataFrame开始,然后在每次迭代时添加一个新列。在添加之前,我们重置了系列的索引。使用concat
而不是仅仅将系列分配给列的好处是:concat
会根据需要自动放大DataFrame