【发布时间】:2017-10-02 06:14:09
【问题描述】:
我有一个由零件订单组成的数据框,我正在尝试对其进行标准化,以便更好地分析数据。数据框已使用以下代码从各种 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 循环内(for value in range(len(data)):)。
但是,无论我尝试什么,我都会收到 TypeError:预期的字符串或类似字节的对象
我检查了该列的 dtype,它指出 data['PRICE'] 是 object 类型,所以我正在努力找出问题所在。
最终目标是将表格格式化为
P/N DESCRIPTION PRICE
654A321 Item 1 1330
783B257 Desc, Item 2 55
897653 part 4 23589
789A234 Widget 5132.00
谁能告诉我 re.sub 上的正则表达式有什么问题以及如何修复它?
感谢(并对冗长的问题表示歉意)。
【问题讨论】:
-
您传递给它的是一个
Series对象,它不是strnorbabytes对象。re.sub不关心你的 pandas 对象的dtype,它关心你的 Python 对象 的type
标签: python regex pandas dataframe