如何合并或连接具有不同长度和空值的 Pandas 系列?

How can one merge or concatenate Pandas series with different lengths and empty value?

我有许多以空白作为某些值的系列。像这样

import pandas as pd
serie_1 = pd.Series(['a','','b','c','',''])
serie_2 = pd.Series(['','d','','','e','f','g'])

每个系列过滤空白都没有问题,像serie_1 = serie_1[serie_1 != '']

但是,当我将它们组合成一个 df 时,无论是从它们构建 df 还是构建两个单列 df 并连接它们,我都没有获得我正在寻找的东西。

我正在寻找 table 这样的:

    
  col1 col2

0   a   d
1   b   e
2   c   f
3   nan g

但是我得到了这样的东西

0   a   nan
1   nan d
2   b   nan
3   c   nan
4   nan e
5   nan f
6   nan g

如何获得我正在寻找的table?

提前致谢

使用pandas.concat的一种方式:

ss = [serie_1, serie_2]
df = pd.concat([s[s.ne("")].reset_index(drop=True) for s in ss], 1)
print(df)

输出:

     0  1
0    a  d
1    b  e
2    c  f
3  NaN  g

我会在创建数据框之前过滤掉空白值,如下所示:

import pandas as pd

def filter_blanks(string_list):
    return [e for e in string_list if e]

serie_1 = pd.Series(filter_blanks(['a','','b','c','','']))
serie_2 = pd.Series(filter_blanks(['','d','','','e','f','g']))

pd.concat([serie_1, serie_2], axis=1)

这导致:

    0   1
0   a   d
1   b   e
2   c   f
3   NaN g

这是一种方法,如果我理解正确的话:

pd.concat([
    serie_1[lambda x: x != ''].reset_index(drop=True).rename('col1'),
    serie_2[lambda x: x != ''].reset_index(drop=True).rename('col2')
], axis=1)

   col1  col2
0   a    d
1   b    e
2   c    f
3   NaN  g

逻辑是:select 非空条目(使用 lambda 表达式)。从 0 重新开始索引编号(使用重置索引)。设置列名(重命名)。创建一个宽 table(在合并函数中使用 axis=1)。