簡體   English   中英

熊貓使用for循環在部分字符串匹配上設置列:使用包含NaN的向量進行錯誤索引

[英]Pandas set column on partial string match using for loop: Error indexing with vector containing NaN

我有一種使用部分字符串匹配分配列的方法。 現在,按照本示例,通過使用for循環,已將此方法擴展為與字符串列表一起使用:

是myDF:

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

其中Colourtoassign是要使用列表colourList在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值的向量建立索引

此數據框的相關列:

ordersTwo ['差異詳細信息']:

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

ordersTwo [ 'VariationStringLabel_FULL']:

0    FALSE
1    FALSE
2    FALSE
3    FALSE

盡管我不認為它是發生索引的向量,但我嘗試使用ordersTwo ['Variation details']。fillna(0,inplace = True)刪除orderTwo ['Variation details']的NaN 但結果是相同。

我的代碼或方法有什么錯誤?

Series.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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM