我有一个带有描述列的数据框,我试图从该列中的文本中解析出测量结果。
df['measurements'] = [re.findall('\S+\scm', i) + re.findall('\S+cm', i) for i in df['description'] if i is not None]
#...
description列中的某些行是空的,因此上面的代码给出了一个ValueError,因为值的长度与索引的长度不匹配。如果行为空,如何附加填充值(如NaN),以使值的长度与索引的长度匹配,并且可以生成新的测量列?
输出看起来与此类似: 例如
description measurements
blabla 32cm x 24cm x 12cm blabla ['32cm', '24cm', '12cm']
NaN NaN
18cm x 15cm x 10cm blablabla ['18cm', '15cm', '10cm']
NaN NaN
答案 0 :(得分:2)
我认为您需要str.findall
完全符合None
的内容 - 它会在输出中返回NaN
:
df['measurements'] = df['description'].str.findall('\S+\scm') +
df['description'].str.findall('\S+cm')
如果需要将None
替换为空列表最简单,请使用fillna
:
des = df['description'].fillna('')
df['measurements'] = des.str.findall('\S+\scm') + des.str.findall('\S+cm')
样品:
df = pd.DataFrame({'description':['blabla 32cm x 24cm x 12cm blabla',np.nan,
'18cm x 15cm x 10cm blablabla',np.nan]})
print (df)
description
0 blabla 32cm x 24cm x 12cm blabla
1 NaN
2 18cm x 15cm x 10cm blablabla
3 NaN
df['measurements'] = df['description'].str.findall('\S+\scm') + \
df['description'].str.findall('\S+cm')
print (df)
description measurements
0 blabla 32cm x 24cm x 12cm blabla [32cm, 24cm, 12cm]
1 NaN NaN
2 18cm x 15cm x 10cm blablabla [18cm, 15cm, 10cm]
3 NaN NaN
des = df['description'].fillna('')
df['measurements'] = des.str.findall('\S+\scm') + des.str.findall('\S+cm')
print (df)
description measurements
0 blabla 32cm x 24cm x 12cm blabla [32cm, 24cm, 12cm]
1 NaN []
2 18cm x 15cm x 10cm blablabla [18cm, 15cm, 10cm]
3 NaN []