在熊猫中连接字符串

时间:2016-06-29 11:30:44

标签: python string pandas sum

我尝试用字符串数据来总结列。问题是我想忽略NaN,但我找不到解决方案。

Dataframe看起来像这样:

s=pd.DataFrame({'A':['(Text,','(Text1,'],'B':['(Text2,','(Text3,'],'C':['(Text4,','(Text5,']})


        A        B        C
0   (Text,  (Text2,  (Text4,
1  (Text1,  (Text3,  (Text5,

首先我删除括号和逗号:

sA = s['A'].str.lstrip('(').str.rstrip(',')
sB = s['B'].str.lstrip('(').str.rstrip(',')
sC = s['C'].str.lstrip('(').str.rstrip(',')

然后我将这些列放在一起。

sNew = sA + ' ' +  sB + ' ' + sC

print sNew
0   Text Text2 Text4
1  Text1 Text3 Text5

1 有没有更好的方法来总结列?我觉得这种方式效率不高。 我为所有列尝试了str.lstrip,但它不起作用。

2 如果我在单元格中有NaN,则该行将为NaN。在这个特殊情况下如何忽略NaN? e.g。

    A        B        C
0   (Text,  (Text2,  (Text4,
1  (Text1,  (Text3,  NaN

我的结果是删除括号后总结......

0   Text Text2 Text4
1   NaN

但我想要以下结果...

0   Text Text2 Text4
1  Text1 Text3 

如果您有一些解决问题的技巧,那就太棒了!

2 个答案:

答案 0 :(得分:0)

在计算新列之前,您可以使用空字符串填充数据框的空值。像这样使用fillna

s.fillna('',inplace = True)

答案 1 :(得分:0)

我认为您可以使用Kiwi解决方案,其中添加了(,删除.strip('(,')的内容:

import pandas as pd
import numpy as np

s=pd.DataFrame({'A':['(Text,','(Text1,'],
                'B':[np.nan,'(Text3,'],
                'C':['(Text4,',np.nan]})
print(s)

         A        B        C
0   (Text,      NaN  (Text4,
1  (Text1,  (Text3,      NaN

def concat(*args):
    strs = [str(arg).strip('(,') for arg in args if not pd.isnull(arg)]
    return ','.join(strs) if strs else np.nan
np_concat = np.vectorize(concat)

s['new'] = np_concat(s.A, s.B, s.C)
print (s)
         A        B        C          new
0   (Text,      NaN  (Text4,   Text,Text4
1  (Text1,  (Text3,      NaN  Text1,Text3