我有这样的数据帧:
Instru,Name
16834306,INFOSYS18SEP640.50PE
16834306,INFOSYS18SEP640.50PE
16834306,BHEL18SEP52.80CE
16834306,BHEL18SEP52.80CE
16834306,IOCL18SEP640PE
16834306,IOCL18SEP640PE
我想通过从Name列中提取字符串来创建单独的列,如下所示:
Instru,Name,Symbol,Month,SP,Type
16834306,INFOSYS18SEP640.50PE,INFOSYS,18SEP,640.50,PE
16834306,INFOSYS18SEP640.50PE,INFOSYS,18SEP,640.50,PE
16834306,BHEL18SEP52.80CE,BHEL,18SEP,52.80,CE
16834306,BHEL18SEP52.80CE,BHEL,18SEP,52.80,CE
16834306,IOCL18SEP640PE,IOCL,18SEP,640,PE
16834306,IOCL18SEP640PE,IOCL,18SEP,640,PE
注意:对于SP列,Decimal显示为Decimal,int显示为int
您可以使用
str.extract
并将.astype
应用于结果,以获得所需的列和作为浮点的特定数字列:这将给你:
然后应用
df.join(separated)
得到您的最终DF:您可以定义分割函数并创建所需的输出
对正则表达式模式中的命名组使用^{}
regex模式的解释
正则表达式是一个有趣的模糊业务,是一种艺术形式。我会解释我做了什么以及为什么。你可以比较一下我相对于@jonclements所做的工作,发现我们都用相同的方法解决了这个问题,但做出了微妙的不同假设。你知道吗
'(?P<group_name>pattern)'
是一种创建捕获组并用'group_name'
命名的方法'(?P<Symbol>.*?)'
抓取到下一个捕获组的所有字符,'?'
表示不要贪心。你知道吗'(?P<Month>\d{1,2}\w{3})'
抓取1或2个数字,然后抓取3个字母。1或2个数字的模糊性是我使前一组不贪婪的原因。你知道吗'(?P<SP>[\d\.]+)'
获取一个或多个数字或句点。诚然,这并不是非常优雅,因为它可以抓住'4.2.4.5'
,但它应该完成这项工作。你知道吗'(?P<Type>.*)'
玩清理和抓住其余的。你知道吗相关问题 更多 >
编程相关推荐