在数据框中创建新列时,将缺失值留空

时间:2017-07-18 06:48:21

标签: python pandas

我有一个带有描述列的数据框,我试图从该列中的文本中解析出测量结果。

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

1 个答案:

答案 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                  []