使用for循环在部分字符串匹配上设置列:使用包含NaN的向量进行错误索引

2024-06-17 08:15:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用部分字符串匹配指定列的方法。我现在通过使用for循环扩展了这个方法,以用于字符串列表,如下例所示:

多年筹资框架:

         mytestdata Colourtoassign
0  blah Orange blah          FALSE
1     blah blah Red          FALSE

其中colortoassign是一列,要使用list colorlist在for循环中的部分字符串匹配上赋值:

[“黑色”, “蓝色”, “绿色”, “橙色”, “粉色”, “紫色”, “红色”, “白色”, “黄色”, '桃红色']

我把它放到for循环中,如下所示:

for i in range(len(colourList)-1):
mydf.loc[mydf['mytestdata'].str.contains(colourList[i]), 'Colourtoassign'] = colourList[i]

产生mydf的预期结果:

         mytestdata Colourtoassign
0  blah Orange blah         Orange
1     blah blah Red            Red

但是,当我尝试将其与我的真实数据一起使用时,请参见下面的示例:

for i in range(len(cableList)-1):
ordersTwo.loc[ordersTwo['Variation details'].str.contains(cableList[i]), 'VariationStringLabel_FULL'] = cableList[i]

我得到了错误ValueError:不能用包含NA/NaN值的向量索引。你知道吗

此数据帧的相关列:

订单2[“变更详情]:

0                                                  NaN
1                                                  NaN
2    [Cable Length (metres):3M (9ft, 10in),Colour:Hot Pink]
3    [Cable Length (metres):2M (6ft, 7in),Colour:Hot Pink]

订单两个['VariationStringLabel\u FULL']:

0    FALSE
1    FALSE
2    FALSE
3    FALSE

虽然我不相信它是索引发生的向量,但我尝试使用ordersTwo['Variation details'].fillna(0,inplace=True)删除ordersTwo['Variation details']的NaN,但结果是一样的。你知道吗

我的代码或方法中有什么错误?你知道吗


Tags: 方法字符串falseforrednanblahorange
1条回答
网友
1楼 · 发布于 2024-06-17 08:15:49

你知道吗str.contains系列(pat,case=True,flags=0,na=nan,regex=True)

其中na:默认NaN,为缺少的值填充值。你知道吗

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.contains.html

请尝试以下代码:

for i in range(len(cableList)-1):
    ordersTwo.loc[ordersTwo['Variation details'].str.contains(cableList[i], na=False), 'VariationStringLabel_FULL'] = cableList[i]

相关问题 更多 >