Python 将多个子字符串匹配模式提取到列中
我的熊猫数据框有如下字符串Python 将多个子字符串匹配模式提取到列中,python,regex,pandas,Python,Regex,Pandas,我的熊猫数据框有如下字符串 A=1;B=3;C=c6 A=2;C=c7;D=8 A B C D 1 3 c6 NaN 2 NaN c7 8 我想将每个字段中的值提取到单独的列中,然后使用字段名作为如下列 A=1;B=3;C=c6 A=2;C=c7;D=8 A B C D 1 3 c6 NaN 2 NaN c7 8 我尝试了拆分df.str.split'=|',expand=True,但它将值和字段
A=1;B=3;C=c6
A=2;C=c7;D=8
A B C D
1 3 c6 NaN
2 NaN c7 8
我想将每个字段中的值提取到单独的列中,然后使用字段名作为如下列
A=1;B=3;C=c6
A=2;C=c7;D=8
A B C D
1 3 c6 NaN
2 NaN c7 8
我尝试了拆分df.str.split'=|',expand=True,但它将值和字段拆分为单独的列
我还尝试使用df.str.extractor'=\s*[^\.]*\s*\;',expand=True,但它只返回第一次出现的值
感谢您的帮助我认为在列表理解中使用拆分是可能的-首先;然后按=并将其转换为字典,这样就可以使用数据帧构造函数:
print (df)
col
0 A=1;B=3;C=c6
1 A=2;C=c7;D=8
L = [dict([y.split('=') for y in x.split(';')]) for x in df['col']]
df = pd.DataFrame(L)
print (df)
A B C D
0 1 3 c6 NaN
1 2 NaN c7 8
详情:
我认为在列表理解中使用拆分是可能的——首先是;然后按=并将其转换为字典,这样就可以使用数据帧构造函数:
print (df)
col
0 A=1;B=3;C=c6
1 A=2;C=c7;D=8
L = [dict([y.split('=') for y in x.split(';')]) for x in df['col']]
df = pd.DataFrame(L)
print (df)
A B C D
0 1 3 c6 NaN
1 2 NaN c7 8
详情:
这是正则表达式的方法
df = pd.DataFrame(dict(re.findall(r'(\w+)=(\w+)', x)) for x in df['col'])
这是正则表达式的方法
df = pd.DataFrame(dict(re.findall(r'(\w+)=(\w+)', x)) for x in df['col'])
我不认为这比使用黑魔法更简单+1我不认为这比使用黑魔法更简单+1.