python - Python Pandas,多个相同分隔符后出现的所有文本
问题描述
我想将文本“[Unique ID]”后面的数字拉到下一个空格。然后,我想创建一个新列,以显示已提取的每个唯一 UID。
我能够抓住第一次出现,但无法抓住所有出现。
这是我一直在使用的代码:
from pandas import DataFrame
Info = {'ID': ['1','2','3'],
'Name': ['Tom Johnson', 'Ben Thompson', 'Mike'],
'Information': ["[Age] 22 [Height] 6'2 [Unique ID] 1424 [Unique ID] 1438 [Unique ID] 1439","[Age] 21 [Height] 6'0 [Unique ID] 1101 [Unique ID] 1101","[Age] 20 [Height] 6'3 [Unique ID] 1424 [Unique ID] 1498"]}
df = DataFrame(Info,columns= ['ID', 'Name', 'Information'])
df['UID'] = [df.split("[Unique ID] ")[1].split(" ")[0] for df in df['Information']]
如您所见,它只会抓取“[Unique ID]”之后的第一次出现。但是,我想要所有的事件。
期望的输出是,
Info2 = {'ID': ['1','1','1','2','3','3'],
'Name': ['Tom Johnson', 'Tom Johnson', 'Tom Johnson', 'Ben Thompson', 'Mike', 'Mike'],
'Information': ["[Age] 22 [Height] 6'2 [Unique ID] 1424 [Unique ID] 1438 [Unique ID] 1439",
"[Age] 22 [Height] 6'2 [Unique ID] 1424 [Unique ID] 1438 [Unique ID] 1439",
"[Age] 22 [Height] 6'2 [Unique ID] 1424 [Unique ID] 1438 [Unique ID] 1439",
"[Age] 21 [Height] 6'0 [Unique ID] 1101 [Unique ID] 1101",
"[Age] 20 [Height] 6'3 [Unique ID] 1424 [Unique ID] 1498",
"[Age] 20 [Height] 6'3 [Unique ID] 1424 [Unique ID] 1498"],
'UID': ['1424','1438', '1439', '1101', '1424', '1498']}
df2 = DataFrame(Info2,columns= ['ID','Name', 'Information', 'UID'])
如图所示,每个记录都有唯一的 UID,如果记录包含多个相同的 UID,则不会创建新记录。
谢谢!
解决方案
你可以使用str.split
和`融化:
new_df = pd.concat((df[['Name', 'Information']],
df.Information.str.split('\[Unique ID\]', expand=True)),
axis=1)
new_df.drop(0, axis=1, inplace=True)
(new_df.melt(id_vars=['Name', 'Information'],
value_name='UID')
.drop('variable', axis=1)
.dropna()
)
输出
Name Information UID
0 Tom Johnson [Age] 22 [Height] 6'2 [Unique ID] 1424 [Unique... 1424
1 Ben Thompson [Age] 21 [Height] 6'0 [Unique ID] 1101 [Unique... 1101
2 Mike [Age] 20 [Height] 6'3 [Unique ID] 1424 [Unique... 1424
3 Tom Johnson [Age] 22 [Height] 6'2 [Unique ID] 1424 [Unique... 1438
4 Ben Thompson [Age] 21 [Height] 6'0 [Unique ID] 1101 [Unique... 1101
5 Mike [Age] 20 [Height] 6'3 [Unique ID] 1424 [Unique... 1498
6 Tom Johnson [Age] 22 [Height] 6'2 [Unique ID] 1424 [Unique... 1439
推荐阅读
- python - Kotlin 将 Array 设置为 HashMap 的键
- build.gradle - 房间数据库注释导致运行时崩溃 M1
- soap - java中的ws枚举实现
- c++11 - 如何使用 c++11 decltype 可变参数模板?
- haskell - Haskell - 如何在错误输出中包含令牌?
- html - 如何在 div 元素中向右移动几个空格?
- java - 我可以在导入的库中为 bean 设置属性吗?
- mesibo - Mesibo -- 已关闭 On-Premise 但仍将 webhook 调用转到 On-Premise IP
- java - 如何在改造 android 中更改 json 顺序?
- ipaf - 使用 PAF 生成 pdf 文件