df = pd.DataFrame({'mix': {0: '84726gsdid=22,name=max,age=33',
1: '[ieiuf8382id=21,name=kris,age=32]'}})
print (df)
mix
0 84726gsdid=22,name=max,age=33
1 [ieiuf8382id=21,name=kris,age=32]
def f(x):
d = {}
for y in x.strip('[]').split(','):
a, b = y.split('=')
if 'id' in a:
d['id'] = b
else:
d[a] = b
return pd.Series(d)
df = df.mix.apply(f)
print (df)
id name age
0 22 max 33
1 21 kris 32
如果可能,某些=缺失:
def f(x):
d = {}
for y in x.strip('[]').split(','):
if '=' in y:
a, b = y.split('=')
if 'id' in a:
d['id'] = b
else:
d[a] = b
return pd.Series(d)
df = df.mix.apply(f)
print (df)
id name age
0 22 max 33
1 21 kris 32
对于原始列,请使用:
df1 = df.join(df.mix.apply(f))
print (df1)
mix id name age
0 84726gsdid=22,name=max,age=33 22 max 33
5 [ieiuf8382id=21,name=kris,age=32] 21 kris 32
>>> cols = ['id', 'name', 'age']
>>> ( df.mix.str.extractall(r'=(.*?)(?:,|])')
.unstack().droplevel(0, axis=1)
.rename(columns=lambda x:cols[x]) )
match id name age
0 22 max 33
1 21 kris 32
如果还需要mix列:
>>> ( df.mix.str.extractall(r'=(.*?)(?:,|])')
.unstack().droplevel(0, axis=1)
.rename(columns=lambda x:cols[x])
.assign(mix=df.mix) )
match id name age mix
0 22 max 33 [84726gsdid=22,name=max,age=33]
1 21 kris 32 [ieiuf8382id=21,name=kris,age=32]
如果字符串格式是固定的,那么只需使用
str.extact
如果列不固定,则使用
str.extractall
:您可以创建字典并转换为
Series
,因此最后一个是通过=
之前的值创建列名称的新数据帧,因为id
是在id
是子字符串的情况下创建列的id
:如果可能,某些
=
缺失:对于原始列,请使用:
您可以执行以下操作:
如果还需要
mix
列:相关问题 更多 >
编程相关推荐