我有一个带有描述列的数据框,我正在尝试从该列中的文本中解析出测量值。
df['measurements'] = [re.findall('\S+\scm', i) + re.findall('\S+cm', i) for i in df['description'] if i is not None]
#...
描述列中的某些行是空的,因此上面的代码给出了一个 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
最佳答案
我认为你需要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 []
关于python - 在数据框中创建新列时将缺失值留空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45159475/