Python 在数据框中创建新列时,将缺少的值留空
我有一个带有描述列的数据框,我正试图从该列中的文本中解析出度量值Python 在数据框中创建新列时,将缺少的值留空,python,pandas,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这样的填充值,以便值的长度与索引的长
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这样的填充值,以便值的长度与索引的长度匹配,并且可以创建新的度量列
输出将类似于以下内容:
例如
我认为您需要的是能够完美处理None
s的内容-它在输出中返回NaN
:
df['measurements'] = df['description'].str.findall('\S+\scm') +
df['description'].str.findall('\S+cm')
如果需要将None
s替换为空列表,最简单的方法是使用:
样本:
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
你能添加一些样本数据和期望的输出吗?我用样本数据改变输出。谢谢!完全忘记了在运行搜索之前,您可以先填充na。我只是在使用dropna,但后来意识到删除的行可能仍然有用。是的,我认为更好的方法是使用
fillna
并获取[]
,而不是NaN
s,如果以后需要处理数据。因为如果列中有标量(NaN
s)的列表,则某些函数可能会失败。
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 []