我有一系列的空白作为一些值。 像这样的东西
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并将它们连接起来,我都没有得到我想要的结果。
我想找一张这样的桌子:
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
我怎样才能得到我要找的那张桌子?
提前致谢
使用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
如果我理解正确的话,这里有一种方法:
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重新开始索引编号(带有重置索引)。 设置列名(使用rename)。 创建一个宽表(在merge函数中使用axis=1)。
在创建数据框架之前,我只需过滤掉空白值,如下所示:
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