缺少值的熊猫数据框乘法

时间:2019-02-22 12:49:03

标签: pandas dataframe error-handling

我有一个包含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

1 个答案:

答案 0 :(得分:0)

您可以使用np.whereSeries.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])