我有一个包含2列(浮动类型)的数据框,但是其中之一缺少由字符串“ ..”表示的数据。
执行乘法运算时,会引发异常,并且整个运算将被中止。
我试图实现的是对浮点值执行乘法,对缺失的值保留“ ..”。
2 * 6
.. * 4
应该给[12, ..]
我找到了一个幼稚的解决方案,其中包括将..
替换为0,然后执行乘法,然后将0替换回..
它似乎不是非常优化。还有其他解决方案吗?
df['x'] = pd.to_numeric(df['x'], errors='coerce').fillna(0)
mg['x'] = df['x'] * df["Value"]
for col in mg.columns:
mg[col] = mg[col].apply(update)
def update(v):
if (v == 0):
return ".."
return v
答案 0 :(得分:0)
您可以使用np.where和Series.isna:
import numpy as np
mg['x'] = np.where(df['X'].isna(), df['X'], df['X']*df['Value'])
如果要将空值替换为“ ..”并乘以其他值:
mg['x'] = np.where(df['X'].isna(), '..', df['X']*df['Value'])
因此,在x列的Value为null的任何地方,它都将保持不变,否则将与Value列的相应行的值相乘
在您的解决方案中,您还可以执行fillna(1):
df['x'] = pd.to_numeric(df['x'], errors='coerce').fillna(1)
mg['x'] = df['x'] * df["Value"]
这是我尝试的方式:
df = pd.DataFrame({'X': [ 2, np.nan],
'Value': [6, 4]})
df
X Value
0 2.0 6
1 NaN 4
np.where(df['X'].isna(), df['X'], df['X']*df['Value'])
array([12., nan])