我将一列分为两列时遇到问题。我想按第一个和最后一个找到的模式'-'拆分该列。也许这很简单。
这是我的专栏:
col1
0 aa-bb-cc-dd
1 aa-bb-cc
2 aa-bb-cc
3 aa-bb-cc-dd
这是我要作为结果的帧:
col1 col2
0 bb-cc dd
1 bb cc
2 bb cc
3 bb-cc dd
谢谢!
答案 0 :(得分:3)
您可以使用列表理解:
df = pd.DataFrame([i.split('-', 1)[1].rsplit('-', 1) for i in df['col1']],
columns=['col1', 'col2'])
print(df)
col1 col2
0 bb-cc dd
1 bb cc
2 bb cc
3 bb-cc dd
Pandas str
方法主要是为了方便起见。对于干净的数据,您可能会发现列表理解对于较大的数据框更有效。
答案 1 :(得分:1)
如果我很了解您的问题,那么您需要删除以'-'分隔的第一个块,然后在col2中拆分最后一个'-'块。如果那是您需要的,可以考虑一下:
df= pd.DataFrame({'col1':['aa-bb-cc-dd', 'aa-bb-cc', 'aa-bb-cc', 'aa-bb-cc-dd']})
df['col2'] = df['col1'].apply(lambda x: x[x.rfind('-')+1:])
df['col1'] = df['col1'].apply(lambda x: x[x.find('-')+1:x.rfind('-')])
print (df)
答案 2 :(得分:1)
第一个切片,并使用str.rsplit
和rename
:
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app
xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
http://xmlns.oracle.com/weblogic/weblogic-web-app
http://xmlns.oracle.com/weblogic/weblogic-web-app/1.7/weblogic-web-app.xsd">
<wls:context-root>WISE.BI.AUDI.WEB.SVC.v5</wls:context-root>
<wls:jsp-descriptor>
<wls:encoding>UTF-8</wls:encoding>
</wls:jsp-descriptor>
<wls:container-descriptor>
<wls:prefer-application-packages>
<wls:package-name>com.ctc.wstx.*</wls:package-name>
<wls:package-name>javax.wsdl.*</wls:package-name>
<wls:package-name>org.apache.cxf.*</wls:package-name>
<!-- <wls:package-name>javax.jws.*</wls:package-name> -->
</wls:prefer-application-packages>
</wls:container-descriptor>
答案 3 :(得分:1)
这是一种惯用但缓慢的方法:
df.col1 = df.col1.str.split('-', 1).str[1] # discard first part
parts = df.col1.str.rsplit('-', 1).str
df.col1 = parts[0]
df['col2'] = parts[1]
虽然可行,但速度并不很快:700k行大约需要4秒。纵观它,您会认为这是一种很好的方法,但是从性能角度来看,它比所有其他方法都差。
答案 4 :(得分:-1)
这可能会有所帮助:
df['col2'] = df['col1'].split('-')[-1]
df['col1'] = '-'.join(i for i in df['col1'].split('-')[1:-1])