替换pandas系列中的负值

时间:2020-07-27 13:01:49

标签: python pandas dataframe series

我有一个类似以下的系列:

<?php 
function getDB(){ 
    static $db; 
    if($db instanceof PDO){ 
        return $db; 
    } 
    require_once CONFIG_DIR.'/database.php'; 
    $dsn = sprintf("myqsl:host=%s;dbname=%s;charset=%s",DB_HOST,DB_DATABASE,DB_CHARSET); 
    $db = new PDO($dsn); // ← HERE
    return $db; 
}

我想将所有负值都替换为0,但是我只能找到适用于数据框的方法。 我尝试使用s = pd.Series({'val1': 'a', 'val2': 'b', 'other_val1': 1, 'other_val2': -1, 'other_val3': 3, 'other_val4': -1.5}) val1 a val2 b other_val1 1 other_val2 0 other_val3 3 other_val4 -1.5 dtype: object s.mask,但是混合类型存在问题。

预期输出为

s.loc

2 个答案:

答案 0 :(得分:2)

使用pd.to_numeric + Series.lt创建一个布尔掩码,然后使用此mask替换系列中的0值:

mask = pd.to_numeric(s, errors='coerce').lt(0)
s.loc[mask] = 0

结果:

val1          a
val2          b
other_val1    1
other_val2    0
other_val3    3
other_val4    0
dtype: object

答案 1 :(得分:0)

您可以使用字典理解:

series = {'val1': 'a', 'val2': 'b', 'other_val1': 1, 'other_val2': -1, 'other_val3': 3, 'other_val4': -1.5}
replaced_series = {k:0 if str(v).lstrip('-+').isdigit() and int(v)<0 else v for (k,v) in series.items()}