pandas 如何连接包含NaN值的字符串列?

balp4ylt  于 2023-05-05  发布在  其他
关注(0)|答案(2)|浏览(187)

我有一个数据,看起来像这样:

import pandas as pd
import numpy as np

mydict = {
    'col1' : ['a', 'b', 'c'],
    'col2' : ['d', np.NaN, 'e'],
    'col3' : ['f', 'g', 'h']
}

mydf = pd.DataFrame(mydict)

我想连接这些字符串列。我试了一下,但不起作用:

mydf['concat'] = mydf[['col1', 'col2', 'col3'].apply('-'.join, axis=1)

错误是TypeError: sequence item 0: expected str instance, float found
我怎么才能让它工作?它应该跳过缺失值,只连接非缺失值。结果应该如下所示:

concat_dict = {
    'col1' : ['a', 'b', 'c'],
    'col2' : ['d', np.NaN, 'e'],
    'col3' : ['f', 'g', 'h'],
    'concat' : ['a-d-f', 'b-g', 'c-e-h']
}
concat_df = pd.DataFrame(concat_dict)
ubof19bj

ubof19bj1#

lambda函数中进行过滤,然后进行连接。

>>> mydf['concat'] = mydf[['col1', 'col2', 'col3']].apply(
...     lambda s: '-'.join(s[s.notnull()]), axis=1)
  col1 col2 col3 concat
0    a    d    f  a-d-f
1    b  NaN    g    b-g
2    c    e    h  c-e-h
o0lyfsai

o0lyfsai2#

Series.str.cat(sep='-')

mydf['concat'] = mydf.apply(lambda x: x.str.cat(sep='-'), axis=1)
col1 col2 col3 concat
0    a    d    f  a-d-f
1    b  NaN    g    b-g
2    c    e    h  c-e-h

相关问题