首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将会计格式的Pandas系列转换为数字系列?

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

Stack Overflow用户
提问于 2015-10-31 20:38:44
回答 2查看 2.4K关注 0票数 1

数字值的会计格式通常使用货币字符,并经常使用括号表示负值。零也可以表示为-$-。当这样的系列被导入到Pandas DataFrame中时,它就是一个对象类型。我需要将其转换为数字类型,并正确地解析负值。

下面是一个例子:

代码语言:javascript
复制
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']})

系列A易于转换。

代码语言:javascript
复制
df['A'] = df['A'].astype(float) 

系列B要求移除$标志,之后它就简单明了了。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-31 21:13:02

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

票数 1
EN

Stack Overflow用户

发布于 2017-08-08 20:08:25

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33456364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档