我有超过100万行的大型数据集,并且列大小各不相同(有时是1列,有时是不同的列数)。最初,我创建了一个脚本,它运行正常。但是最近我遇到了一个问题,可以使用以下脚本来复制。
import pandas as pd
df=pd.DataFrame({'a':[0,0],'b':[100,1]})
df[df>0]='S1'
df[df==0]='S0'
错误:
TypeError: Cannot do inplace boolean setting on mixed-types with a non np.nan value
第3行和第4行可以互换,问题将出现在第4行。
初始df:
a b
0 100
0 1
期望df:
a b
S0 S1
S0 S1
答案 0 :(得分:1)
对于DataFrame范围内的替换,这并不完全正确。使用where
或mask
:
df = df.where(df == 0, 'S1').where(df > 0, 'S0')
df
a b
0 S0 S1
1 S0 S1
或者,您可以使用np.select
:
df[:] = np.select([df > 0, df == 0], ['S1', 'S0'], default=df)
df
a b
0 S0 S1
1 S0 S1