我尝试用字符串数据来总结列。问题是我想忽略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
如果您有一些解决问题的技巧,那就太棒了!
答案 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