我的数据框中有一个列有价格数据但是将它们全部放在一起作为“价格x尺寸(num_orders)”。例如,列(从CSV文件中读入)是: 127.3 x 13(1) 我偶然发现了Pandas提取方法,但我只能创建一个列和一个时间。所以我有它的工作,但我想知道如何在一个声明中完成所有这一切,因为我认为它至少会给我一些Pandas指令。 这有效:
df['price']=df.Level1.str.extract('(\d*\.\d*) x', expand=False)
df['size']=df.Level1.str.extract(' x (\d*)', expand=False)
df['num_orders'] = df.Level1.str.extract(' \((\d*)\)$', expand=False)
但这不是:
gcq7['price'], gcq7['size'], gcq7['num_orders'] =
gcq7.Level1.str.extract('(?P<price>\d*\.\d*) x (?P<size>\d*) \((?P<num_orders>\d*)\)$', expand=False)
我只是得到三个标题正确的列(价格,大小,num_orders),但它们的列名一直是值,即'price'列的“price”作为每行的值。< / p>
帮助表示赞赏。
编辑: 考虑以下列,索引为输入:
Date_Timestamp
2017-06-01 00:00:00.000 127.06000000 x 8 (0)
2017-06-01 00:00:00.000 127.38000000 x 8 (0)
期望的输出:
price size num_orders
Date_Timestamp
2017-06-01 00:00:00.000 127.06000000 8 0
2017-06-01 00:00:00.000 127.38000000 8 0
根据建议进行编辑,以及将来的清晰度。
答案 0 :(得分:1)
IIUC你几乎在那里:
pat = r'(?P<price>\d*\.\d*)\s*x\s*(?P<size>\d*)\s*\((?P<num_orders>\d*)\)$'
gcq7[['price','size','num_orders']] = gcq7.Level1.str.extract(pat, expand=True)
# NOTE: ^^^^
答案 1 :(得分:0)
您可以使用extractall
考虑这个df:
gcq7 = pd.DataFrame({'Level1': ['127.3 x 13 (1)']})
gcq7.Level1.str.extractall('(?P<price>.*) x (?P<size>\d*) \((?P<num_orders>\d*)\)')\
.reset_index(drop=True)
你得到了
price size num_orders
0 127.3 13 1