TypeError:在pandas dataframe

时间:2017-09-30 03:07:49

标签: python regex pandas dataframe

我有一个由部件订单组成的数据框,我试图进行标准化以便更好地分析数据。数据框已使用以下代码从各种CSV和XLSX文件中编译

    source_data = pd.read_excel(filename,sheet_name,skiprows=HeaderRow-1,dtype=object)
    source_data = pd.read_csv(filename,skiprows=HeaderRow-1,dtype=object)

它们被作为对象读入,因为各种不同的文件来自不同的公司,这些公司有自己独特的标记特定字段的方式,而且大多数字段都需要是字符串(部件号,ID号等等)如果以int / float形式引入,可能会被误传。

最重要的是,一些公司'数据功能奇怪的格式化价格,随机地将空格投入PRICE字段(除$和之外)。

这会导致我的数据如下所示

    P/N         DESCRIPTION     PRICE
    654A321     Item 1          $1 ,330
    783B257     Desc, Item 2    $55
    897653      part 4          $2 3,589
    789A234     Widget          5132.00

我一直试图通过使用以下任何代码删除[$,]字符:

    data.loc[value,'PRICE'] = re.sub(r"[^0-9]+","",data['PRICE'][value])

    data.loc[value,'PRICE'] = re.sub('\$','',data['PRICE'][value])
    data.loc[value,'PRICE'] = re.sub(' ','',['PRICE'][value])
    data.loc[value,'PRICE'] = re.sub(',','',['PRICE'][value])

3的集合在for循环中(对于范围内的值(len(data)):)。

但是,不管我似乎尝试过什么,我都会收到 TypeError:期望的字符串或类似字节的对象

我检查过该列的dtype,并指出数据[' PRICE']属于对象类型,因此我很难看出问题所在。

最终目标是将表格格式化为

    P/N         DESCRIPTION     PRICE
    654A321     Item 1          1330
    783B257     Desc, Item 2    55
    897653      part 4          23589
    789A234     Widget          5132.00

有人可以告诉我在re.sub上我的正则表达方式有什么问题以及如何修复它?

谢谢(并为冗长的问题道歉)。

1 个答案:

答案 0 :(得分:0)

您可以使用str.replace替换空格(\ s +),逗号(,)和$(\ $)

df['PRICE'] = df['PRICE'].str.replace('\s+|,|\$', '')

你得到了

    P/N     DESCRIPTION     PRICE
0   654A321 Item 1          1330
1   783B257 Desc, Item 2    55
2   897653  part 4          23589