如何合并或连接具有不同长度和空值的 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)。
我有许多以空白作为某些值的系列。像这样
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)。