为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕森王 2023-03-30 09:45:03
我有许多以空白作为某些值的系列。像这样的东西import pandas as pdserie_1 = pd.Series(['a','','b','c','',''])serie_2 = pd.Series(['','d','','','e','f','g'])每个series过滤blank是没有问题的,像serie_1 = serie_1[serie_1 != '']但是,当我将它们组合在一个 df 中时,无论是从它们构建 df 还是构建两个单列 df 并连接它们,我都没有获得我正在寻找的东西。我正在寻找这样的表:      col1 col20   a   d1   b   e2   c   f3   nan g但我正在获得这样的东西0   a   nan1   nan d2   b   nan3   c   nan4   nan e5   nan f6   nan g我怎样才能得到我要找的桌子?
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

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


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

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


查看完整回答
反对 回复 2023-03-30
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

一种使用方式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


查看完整回答
反对 回复 2023-03-30
?
BIG阳

TA贡献1859条经验 获得超6个赞

在创建这样的数据框之前,我会过滤掉空白值:


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


查看完整回答
反对 回复 2023-03-30
  • 3 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信