我正在处理入站用户数据。我收到 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
