使用分隔符pandas python将单元格连接成一个字符串

Bas*_*ien 7 python string concatenation pandas

鉴于以下内容:

df = pd.DataFrame({'col1' : ["a","b"],
            'col2'  : ["ab",np.nan], 'col3' : ["w","e"]})
Run Code Online (Sandbox Code Playgroud)

我希望能够创建一个列,将所有三列的内容连接成一个字符串,在忽略时用字符"*"分隔NaN.

所以我会得到类似的东西,例如:

a*ab*w
b*e
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

刚刚意识到还有一些额外的要求,我需要使用方法来处理整数和浮点数,并且还能够处理特殊字符(例如,西班牙字母表的字母).

EdC*_*ica 8

In [68]:

df['new_col'] = df.apply(lambda x: '*'.join(x.dropna().values.tolist()), axis=1)
df
Out[68]:
  col1 col2 col3 new_col
0    a   ab    w  a*ab*w
1    b  NaN    e     b*e
Run Code Online (Sandbox Code Playgroud)

UPDATE

如果您有整数或浮动,您可以将这些转换为str第一个:

In [74]:

df = pd.DataFrame({'col1' : ["a","b",3],
            'col2'  : ["ab",np.nan, 4], 'col3' : ["w","e", 6]})
df
Out[74]:
  col1 col2 col3
0    a   ab    w
1    b  NaN    e
2    3    4    6
In [76]:

df['new_col'] = df.apply(lambda x: '*'.join(x.dropna().astype(str).values), axis=1)
df
Out[76]:
  col1 col2 col3 new_col
0    a   ab    w  a*ab*w
1    b  NaN    e     b*e
2    3    4    6   3*4*6
Run Code Online (Sandbox Code Playgroud)

另一个更新

In [81]:

df = pd.DataFrame({'col1' : ["a","b",3,'ñ'],
            'col2'  : ["ab",np.nan, 4,'ü'], 'col3' : ["w","e", 6,'á']})
df
Out[81]:
  col1 col2 col3
0    a   ab    w
1    b  NaN    e
2    3    4    6
3    ñ    ü    á

In [82]:

df['new_col'] = df.apply(lambda x: '*'.join(x.dropna().astype(str).values), axis=1)
?
df
Out[82]:
  col1 col2 col3 new_col
0    a   ab    w  a*ab*w
1    b  NaN    e     b*e
2    3    4    6   3*4*6
3    ñ    ü    á   ñ*ü*á
Run Code Online (Sandbox Code Playgroud)

我的代码仍适用于西班牙语字符