- 我有如下資料框:
df = pd.DataFrame(np.array([['abc 33 aaa 9g98f 333', 'aaa'],
['cde aaa 95fwf', 'aaa'],
['12 faf bbb 92gcs', 'bbb'],
['faf bbb 7t87f', 'bbb']]),
columns=['column1', 'column2'])
column1 值的 len 可能不同 - 從 2 到 5 個單詞,所以用空格分割不是一個選項。
column1 column2
0 abc 33 aaa 9g98f 333 aaa
1 cde aaa 95fwf aaa
2 12 faf bbb 92gcs bbb
3 faf bbb 7t87f bbb
- 輸出應該是這樣的:
column1 new_column1 new_column2 column2
0 abc 33 aaa 9g98f abc 33 9g98f 333 aaa
1 cde aaa 95fwf cde 95fwf aaa
2 faf bbb 92gcs faf 92gcs bbb
3 12 faf bbb 7t87f 12 faf 7t87f bbb
該主題 -如何將資料框字串列拆分為兩列?- 沒有幫助因為分隔符
UPD。左邊的“邊”可能有 2-5 個詞——右邊也是。
uj5u.com熱心網友回復:
選項1
如果最后兩列只有一個單詞,則可以選擇拆分空格。使用rsplit:
df['column1'].str.rsplit(n=2, expand=True)
輸出:
0 1 2
0 abc 33 aaa 9g98f
1 cde aaa 95fwf
2 12 faf bbb 92gcs
3 faf bbb 7t87f
注意。這不適用于更新的示例
選項 2
或者,在提供的分隔符上拆分:
df[['new_column1', 'new_column2']] = [a.split(f' {b} ') for a,b in
zip(df['column1'], df['column2'])]
輸出:
column1 column2 new_column1 new_column2
0 abc 33 aaa 9g98f 333 aaa abc 33 9g98f 333
1 cde aaa 95fwf aaa cde 95fwf
2 12 faf bbb 92gcs bbb 12 faf 92gcs
3 faf bbb 7t87f bbb faf 7t87f
選項 3
最后,如果您有很多時間相同的分隔符和很多行,則可能值得對每組使用矢量拆分:
(df
.groupby('column2')
.apply(lambda g: g['column1'].str.split(f'\s*{g.name}\s*', expand=True))
)
輸出:
0 1
0 abc 33 9g98f 333
1 cde 95fwf
2 12 faf 92gcs
3 faf 7t87f
uj5u.com熱心網友回復:
不知道你的意思是用空格分割不是一個選項,你能舉個例子嗎?如我所見,您要實作的邏輯如下:新列應包含最后一個空格之后的最后一部分,而另一列應包含其余部分,對嗎?如果這是假設重現您的輸出將是:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([['abc 33 aaa 9g98f', 'aaa'], ['cde aaa 95fwf', 'aaa'], ['12 faf bbb 92gcs', 'bbb'], ['faf bbb 7t87f', 'bbb']]), columns=['column1', 'column2'])
df["new_column1"] = [ ' '.join(s.split(' ')[:-2]) for s in df["column1"].values ]
df["new_column2"] = [ s.split(' ')[-1] for s in df["column1"].values ]
好的:根據更新的問題,我現在是這樣理解的:
df[["new_column1","new_column2"]] = [ a.split(b) for a,b in df[["column1","column2"]].values ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/467223.html
