所以这更像是一个问题,而不是我遇到的问题。
我想和.append()
一些大熊猫系列'在一起,不假思索,我只是total=series1+series2+series3
。
每个系列的长度分别为2199902,171175和178989,sum(pd.isnull(i) for i in total)
= 2214596
P.S所有3个系列'都没有空值,是否与合并3个不同长度的系列产生了缺失值?即使这就是为什么会创建航空2,214,596空值?
答案 0 :(得分:4)
如果您正在尝试追加系列,那么您做错了。 +
运算符调用.add
,最终添加系列中的每个对应元素。如果您的系列未对齐,则会导致生成大量NaN
。
如果您想将追加这些一起添加到一个长系列中,您可以使用pd.concat
:
pd.concat([s1, s2, s3], ignore_index=True)
0 1
1 2
2 4
3 5
4 4
5 7
6 40
7 70
dtype: int64
数据来自jezrael's post。
如果您要使用append
,可以循环播放,或使用reduce
:
s = s1
for i in [s2, s3]:
s = s.append(i, ignore_index=True)
s
0 1
1 2
2 4
3 5
4 4
5 7
6 40
7 70
dtype: int64
from functools import reduce
reduce(lambda x, y: x.append(y, ignore_index=True), [s1, s2, s3])
0 1
1 2
2 4
3 5
4 4
5 7
6 40
7 70
dtype: int64
两种解决方案都非常适用于多个系列,但与pd.concat
或np.concatenate
相比,它们速度较慢。
答案 1 :(得分:2)
如果sum
系列所有索引都对齐。因此,如果某个索引存在于series1
而不存在于另一个Series
中,请获取NaN
s。
因此fill_value=0
需要add
:
s = s1.add(s2, fill_value=0).add(s3, fill_value=0)
样品:
s1 = pd.Series([1,2,4,5])
s2 = pd.Series([4,7], index=[10,11])
s3 = pd.Series([40,70], index=[2,4])
s = s1.add(s2, fill_value=0).add(s3, fill_value=0)
print (s)
0 1.0
1 2.0
2 44.0
3 5.0
4 70.0
10 4.0
11 7.0
dtype: float64
但如果需要将它们一起添加(或使用concat
提及cᴏʟᴅsᴘᴇᴇᴅ
):
s = s1.append(s2, ignore_index=True).append(s3, ignore_index=True)
print (s)
0 1
1 2
2 4
3 5
4 4
5 7
6 40
7 70
dtype: int64
numpy alternative:
#alternative, thanks cᴏʟᴅsᴘᴇᴇᴅ - np.concatenate([s1, s2, s3])
s = pd.Series(np.concatenate([s1.values, s2.values, s3.values]))
print (s)
0 1
1 2
2 4
3 5
4 4
5 7
6 40
7 70
dtype: int64
如果要使用+
进行追加,则需要将系列转换为列表:
s = pd.Series(s1.tolist() + s2.tolist() + s3.tolist())
print (s)
0 1
1 2
2 4
3 5
4 4
5 7
6 40
7 70
dtype: int64