从pandas Dataframe中的混合dtype列中删除破折号字符串

时间:2019-03-21 17:40:13

标签: python python-3.x pandas types numeric

我有一个数据框,其中可能的对象与数值混合在一起。

我的目标是将每个值更改为一个简单的整数,但是,其中一些值在数字之间具有-

一个最小的工作示例如下:

import pandas as pd

d = {'API':[float(4433), float(3344), 6666, '6-9-11', '8-0-11', 9990]}
df = pd.DataFrame(d)

我尝试:

df['API'] = df['API'].str.replace('-','')

但是对于数字类型,这留给我nan的原因,因为它只在整个框架中搜索字符串。

输出为:

API

nan
nan
nan
6911
8011
nan

我想要一个输出:

API

4433
3344
6666
6911
8011
9990

所有类型均为int

是否有一种简单的方法来处理系列中的对象类型,而使实际数值保持不变?我正在大型数据集(超过300,000行)上使用此技术,因此lambdaseries operations之类的东西比循环搜索更受欢迎。

2 个答案:

答案 0 :(得分:4)

df.replacedf = df.replace('-', '', regex=True).astype(int) API 0 4433 1 3344 2 6666 3 6911 4 8011 5 9990 一起使用

[XmlRoot(ElementName = "mdfeProc",Namespace = "http://www.portalfiscal.inf.br/mdfe", IsNullable = false)]
public class XML
{        
    [XmlElement(ElementName = "MDFe", Namespace = "http://www.portalfiscal.inf.br/mdfe")]       
    public MDFe MDFe { get; set; }                
    [XmlAttribute(AttributeName = "versao")]
    public string versao { get; set; }

}


public class MDFe
{
    [XmlElement(ElementName = "infMDFe", Namespace = "http://www.portalfiscal.inf.br/mdfe")]
    public InfMDFe InfMDFe { get; set; }       

}

[XmlRoot(ElementName = "infMDFe") ]
public class InfMDFe
{
    [XmlElement(ElementName = "ide", Namespace = "http://www.portalfiscal.inf.br/mdfe")]
    public Ide Ide { get; set; }       
    [XmlAttribute(AttributeName = "Id")]
    public string Id { get; set; }
    [XmlAttribute(AttributeName = "versao")]
    public string versao { get; set; }
}

[XmlRoot(ElementName = "ide", Namespace = "http://www.portalfiscal.inf.br/mdfe")]
public class Ide
{
    [XmlElement(ElementName = "cUF", Namespace = "http://www.portalfiscal.inf.br/mdfe")]
    public int cUF { get; set; }
}

答案 1 :(得分:1)

也是

df['API'] = df['API'].astype(str).apply(lambda x: x.replace('-', '')).astype(int)