我想用一些特定的單詞拆分列并同時保留分隔符。我試圖拆分列,str.split但結果不是我想要的。
示例資料(test.csv):
a
abc123and321abcor213cba
abc321or123cbaand321cba
我的代碼:
import pandas as pd
df = pd.read_csv('test.csv')
df[['b','c']] = df['a'].str.split("and",1,expand=True)
df[['c','d']] = df['c'].str.split("or",1,expand=True)
print(df)
我的結果:
a b c d
0 abc123and321abcor213cba abc123 321abc 213cba
1 abc321or123cbaand321cba abc321or123cba 321cba None
想要的結果:
a b c d
0 abc123and321abcor213cba abc123and 321abcor 213cba
1 abc321or123cbaand321cba abc321or 123cbaand 321cba
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
借用 Tim 的回答,使用后視正則運算式在and或上拆分or,而不用完拆分中的分隔字串:
d = {'a': ["abc123and321abcor213cba", "abc321or123cbaand321cba"]}
df = pandas.DataFrame(data=d)
df[["b", "c", "d"]] = df['a'].str.split(r'(?<=and)|(?<=or)', expand=True)
輸出:
a b c d
0 abc123and321abcor213cba abc123and 321abcor 213cba
1 abc321or123cbaand321cba abc321or 123cbaand 321cba
uj5u.com熱心網友回復:
如果您在split檢查是否有太舊的 Pandas 版本時遇到問題。
您也可以使用str.extractall和unstack。join如果您事先不知道匹配/列的數量,我還建議使用添加列?
df = pd.DataFrame({'a': ["abc123and321abcor213cba", "abc321or123cbaand321cba"]})
df.join(df['a'].str.extractall(r'(.*?(?:and|or)|. $)')[0].unstack('match'))
輸出:
a 0 1 2
0 abc123and321abcor213cba abc123and 321abcor 213cba
1 abc321or123cbaand321cba abc321or 123cbaand 321cba
uj5u.com熱心網友回復:
嘗試在lookbehind上拆分(?<=and|or):
df[['b', 'c', 'd']] = df['a'].str.split(r'(?<=and)|(?<=or)', 1, expand=True)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/399108.html
