将会计格式的Pandas系列转换为数字系列?

时间:2015-10-31 20:38:44

标签: python numpy pandas dataframe

数值的会计格式通常使用货币字符,并且通常使用括号表示负值。零也可以表示为Start doA() if it completes start doB() if it completes emit .Success else emit .BFailed. else forward the error. -。将这样的系列导入Pandas DataFrame时,它是一种对象类型。我需要将其转换为数字类型并正确解析负值。

以下是一个例子:

$-

A系列很容易转换,例如

import numpy as np
import pandas as pd
from pandas import Series, DataFrame
df = pd.DataFrame({'A':['123.4', '234.5', '345.5', '456.7'],
                   'B':['$123.4', '$234.5', '$345.5', '$456.7'],
                   'C':['($123.4)', '$234.5', '($345.5)', '$456.7'],
                   'D':['$123.4', '($234.5)', '$-', '$456.7']})

B系列要求删除df['A'] = df['A'].astype(float) 符号,然后才能直截了当。

然后是系列C和D.它们包含括号(即负数)值,D包含$为零。如何正确地将这些系列解析为数字系列/数据框?

2 个答案:

答案 0 :(得分:2)

import numpy as np

def pd_columntonumbeR(df, colname):
    for c in colname:
        df[c] = np.vectorize(replacetonumbeR)(df[c])
        df[c].fillna(0, inplace=True)
        df[c] = pd.to_numeric(df[c])


def replacetonumbeR(s):
    if type(s).__name__ == "str":
        s = s.strip()
        if s == "-":
            s = 0
        else:
            s = s.replace(",","").replace("$","")
            if s.find("(") >= 0 and s.find(")") >= 0:
                s = s.replace("(","-").replace(")","")
    return s

答案 1 :(得分:1)

我使用Pandas replace函数替换$和),替换为0,然后最后替换(by - 。然后你可以做df=astype(float)它应该工作