我的数据框中有一列包含价格数据,但将它们放在一起作为“价格 x 大小 (num_orders)”。例如,该列(从 CSV 文件中读取)是:127.3 x 13 (1)我遇到了 Pandas extract 方法并且我可以使用它,但我只能让它在创建一个列和一次时工作。所以我让它工作,但我想知道如何在一个语句中完成所有操作,因为我认为它至少会给我一些 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),但它们的列名称一直作为值,即“价格”列的每一行的值都是“价格”。
感谢帮助。
编辑:考虑以下以索引作为输入的列:
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
根据建议进行编辑,以便将来清晰。
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: ^^^^
我是一名优秀的程序员,十分优秀!