我正在处理入站用户数据。我收到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
如何创建这样的结果?
答案 0 :(得分:5)
您可以通过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