我需要幫助
我想用python撰寫一個腳本,其中存盤在一行中的字串根據某些字符分成不同的行
我正在嘗試提取“a”之間的所有內容。和 ”;” (同樣在“b.”和“;”等到不同的行)
例如(資料存盤在 pandas 資料框中)
| c1 | c2 | c3 |
|---|---|---|
| 1 | 站 | a.xxx 我。gh 二。kj ;b.yyy; |
| 2 | 丹尼 | a.xxx;by,cz; |
被分割為
| c1 | c2 | c3 |
|---|---|---|
| 1 | 站 | xxx 一世。gh 二。kj |
| 2 | 站 | 年年 |
| 3 | 丹尼 | xxx |
| 4 | 丹尼 | 是的 |
| 5 | 丹尼 | z |
uj5u.com熱心網友回復:
您可以使用下面的解決方案,它使用正則運算式來決議字串并獲取分號之間的所有資料
# set up dataframe
data = {
"c1": [1, 2],
"c2": ["Sta", "Danny"],
"c3": ["a.xxx;b.yyy;", "a.xxx;b.y;c.z;"]
}
df = pd.DataFrame(data)
# parse string column
df["c4"] = df["c3"].str.findall(r"\w.([^;] )")
# use explode to create a new record for each item found in c3
df = df.explode("c4")
uj5u.com熱心網友回復:
您可以使用正str.extractall則\.(?P<c3>[^;,] );?運算式和join:
df2 = (df.drop(columns='c3')
.join(df['c3'].str.extractall(r'\.(?P<c3>[^;,] );?')
.droplevel(1))
)
輸出:
c1 c2 c3
0 1 Sta xxx
0 1 Sta yyy
1 2 Danny xxx
1 2 Danny y
1 2 Danny z
僅在 a|b 之后
df2 = (df.drop(columns='c3')
.join(df['c3'].str.extractall(r'(?:a|b)\.(?P<c3>[^;,] );?')
.droplevel(1))
)
輸出:
c1 c2 c3
0 1 Sta xxx i. gh ii. kj
0 1 Sta yyy
1 2 Danny xxx
1 2 Danny y
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/456048.html
標籤:python-3.x 熊猫 数据框
上一篇:根據R中的連續天數分配ID
