我有一个由部件订单组成的数据框,我试图进行标准化以便更好地分析数据。数据框已使用以下代码从各种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上我的正则表达方式有什么问题以及如何修复它?
谢谢(并为冗长的问题道歉)。
答案 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