Skip to main content
 首页 » 编程设计

python之如何在一个 DataFrame 中组合字符串

2025年05月04日33findumars

我正在处理入站用户数据。我收到 DataFrame h 应该包含所有 float 但有一些字符串:

>>> h = pd.DataFrame(np.random.rand(3, 2), columns=['a', 'b']) 
>>> h.loc[0, 'a'] = 'bad' 
>>> h.loc[1, 'b'] = 'robot' 
>>> h 
           a           b 
0        bad    0.747314 
1   0.921919       robot 
2   0.754256    0.664455 

我处理并将字符串设置为 np.nan(我意识到 np.nan 是一个 float 但这是为了说明):

>>> hh = h.copy() 
>>> hh.loc[0, 'a'] = np.nan 
>>> hh.loc[1, 'b'] = np.nan 
>>> hh 
           a           b 
0        NaN    0.747314 
1   0.921919         NaN 
2   0.754256    0.664455 

我有一个带有期望值的DataFrame(或一个dict):

>>> g = pd.DataFrame({'a': ['foo'], 'b': ['bar']}, index=h.index) 
>>> g 
      a       b 
0   foo     bar 
1   foo     bar 
2   foo     bar 

我用它来填充错误数据。

>>> hh.fillna(g) 
          a           b 
0        foo    0.747314 
1   0.921919         bar 
2   0.754256    0.664455 

我还需要包含预期的 数据。所以结果应该是:

>>> magic(hh, g) 
                   a                     b 
0   rec=bad; exp=foo              0.747314 
1           0.921919    rec=robot; exp=bar 
2           0.754256              0.664455 

如何创建这样的结果?

请您参考如下方法:

您可以通过 DataFrame.where 将非必需值转换为 NaN , 与 string 连接在一起并最后替换原始值:

m = hh.isna() 
df = ('rec=' + h.where(m) + '; exp=' + g.where(m)).fillna(h) 
print (df) 
                  a                   b 
0  rec=bad; exp=foo            0.440508 
1          0.525949  rec=robot; exp=bar 
2          0.337586            0.414336