[英]Complicated pattern separation on one column of dataframe, while keeping original columns in Python
[英]Complex transformation on one column, while keeping original columns in Python/Pandas
我有一个 dataframe,df,我希望在我的列中对值进行特定分隔以显示第一个单词和数字及其“T”值。 我想要用“-”分隔的第一个“单词”及其#T 值。
数据
type total free use
AY12-AYY-AY-R800-900G-12T_18T-R6-v.A 10 5 5
AY12-AYY-AY-R800-900G-12T_18T-R6-v.A 10 4 6
AY12-AYY-AY-R800-900G-12T_18T-R6-v.A 10 1 9
AY12-AYY-AY-R800XD-900G-6.4T-R11-WOW-v.A 10 8 2
AY12-AYY-AY-R800XD-900G-6.4T-R11-WOW-v.A 10 3 7
期望的
type total free use
AY12 12T 10 5 5
AY12 12T 10 4 6
AY12 12T 10 1 9
AY12 6.4T 10 8 2
AY12 6.4T 10 3 7
正在做
import pandas as pd
def extract_value(s):
regex = re.search(r'(^.+?)-.+?(\d+(?:\.\d+)?T)', s)
if regex:
first_word = regex.group(1)
code = regex.group(2)
return f'{first_word} {code}'
return s
df.columns = ['type', 'total', 'free', 'use']
但是,转换没有发生,结果如下:
type total free use
AY12-AYY-AY-R800-900G-12T_18T-R6-v.A 10 5 5
AY12-AYY-AY-R800-900G-12T_18T-R6-v.A 10 4 6
AY12-AYY-AY-R800-900G-12T_18T-R6-v.A 10 1 9
AY12-AYY-AY-R800XD-900G-6.4T-R11-WOW-v.A 10 8 2
AY12-AYY-AY-R800XD-900G-6.4T-R11-WOW-v.A 10 3 7
我还在研究。 任何帮助或建议表示赞赏
虽然我确信有一个更优雅的解决方案,但这应该可以
df['type'] = df['type'].apply(lambda x: ' '.join(re.findall(r'(^.+?)-.+?(\d+(?:\.\d+)?T)', x)[0]))
你有没有尝试过:
df['type']=df['type'].str.extract('(\w+(?=[-AYY]))')+ " "+ df['type'].str.extract('(?<=0G-)(.*?)(?=\-|_)')
type total free use
0 AY12 12T 10 5 5
1 AY12 12T 10 4 6
2 AY12 12T 10 1 9
3 AY12 6.4T 10 8 2
4 AY12 6.4T 10 3 7
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.