python - 如何将字符串列与 Null 合并

标签 python python-3.x pandas dataframe

我有一个数据框:

df = pd.DataFrame({'id':[1,2,3,4], 'val1':['21','22','3','35'], 
                   'val2':['99',None,'91','67'], 'val3':['21','45','76','88']})

我想将以 val 开头的列的所有值合并到单个列中。

预期输出:

    id val1  val2 val3       val                                                                                                       
0   1   21    99   21  21,99,21                                                                                                       
1   2   22  None   45     22,45                                                                                                       
2   3    3    91   76   3,91,76                                                                                                       
3   4   35    67   88  35,67,88 

我尝试过的:

df['val'] = df['val1']+","+df['val2']+","+df['val3']

如果没有 Null 值,则效果很好,但如果行包含 None ,它会使整行 NaN

   id val1  val2 val3       val                                                                                                       
0   1   21    99   21  21,99,21                                                                                                       
1   2   22  None   45       NaN                                                                                                       
2   3    3    91   76   3,91,76                                                                                                       
3   4   35    67   88  35,67,88

最佳答案

使用 applydropna:

df['val'] = df[['val1',  'val2', 'val3']].apply(lambda x: ';'.join(x.dropna()), axis=1)
#alternative, thanks Jon Clements
#df['val'] = df.filter(regex='^val').apply(lambda x: ';'.join(x.dropna()), axis=1)
print (df)

   id val1  val2 val3       val
0   1   21    99   21  21;99;21
1   2   22  None   45     22;45
2   3    3    91   76   3;91;76
3   4   35    67   88  35;67;88

如果性能很重要,替代方法是使用嵌套列表理解:

df['val'] = [';'.join(y for y in x if isinstance(y, str))
                           for x in  df.filter(regex='^val').values]

关于python - 如何将字符串列与 Null 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54906740/

相关文章:

python - for 循环不适用于 if else 条件

python-3.x - 高斯噪声不会应用于整个图像

python - Pandas 根据值插入行并用 0 填充

python - 如何计算两列中唯一字符串的数量?

python - Tensorflow 导入使 Python 在 Windows 上没有任何错误地崩溃

python - Django REST框架在调用serializer.isValid()之前指定一些字段

python - 为什么我不能在 python 中交换 unicode 字符

python - Pandas:获取具有列值的行并用另一个值更新注释列

python - 对键也是字典的字典键进行排序

python - 如何提高 python 循环速度?