![](/img/trans.png)
[英]How to replace values in a column randomly using values from a list on Pandas?
[英]Pandas replace string using values from list
我正在嘗試在dataframe(df)內的一列中替換字符串。 df的外觀如下:
0 1
0 2012 Black Toyota Corolla White/Black/Red
1 2013 Red Toyota Camry Red
2 2015 Blue Honda Civic Blue
3 2012 Black Mazda 6 Black/Red/White
4 2011 White Nissan Maxima White/Red/Black
有時,列1具有多個顏色值,有時只有一個值。 我想獲取第1列中有多少個值,請檢查第0列中是否存在任何值,然后從第0列中刪除該值。
我嘗試過這種方式。
def removeColor(main,sub):
for i in sub.split('/'):
main = main.str.replace(i, '')
return(main)
>>> df['0'] = df['0'].map(lambda x: removeColor(x['0'],x['2']))
這將導致TypeError。
TypeError:字符串索引必須是整數
我的預期輸出如下所示:
0 1
0 2012 Toyota Corolla White/Black/Red
1 2013 Toyota Camry Red
2 2015 Honda Civic Blue
3 2012 Mazda 6 Black/Red/White
4 2011 Nissan Maxima White/Red/Black
map
僅適用於系列。 在您的lambda
函數中, x
將是一個字符串(列“ 0”的值),因此當您執行x["0"]
和x["1"]
它試圖從字符串中獲取索引,因此會出現錯誤。
apply函數使您可以對整個行(或列)進行操作,因此更適合。 這是完成您所追求的目標的一種方法:
import re
def remove_color(row):
return re.sub(row.iloc[1].replace("/", "|"), "", row.iloc[0]).replace(" ", " ")
df.iloc[:, 0] = df.apply(remove_color, axis=1)
您可以將iloc
調用替換為特定的列名,以使其更具可讀性(您提到的col名稱可以是任何東西,因此我在這里提供了一種通用方法)。
第二個replace
調用是刪除re.sub
剩余的多余空間。 您可以修改re.sub
以在單個調用中執行此操作,但是可能會變得凌亂。
import pandas as pd
iLoc = pd.DataFrame({'0': ['2012 Black Toyota Corolla','2013 Red Toyota Camry','2015 Blue Honda Civic','2012 Black Mazda 6','2011 White Nissan Maxima'],'1': ['White/Black/Red','Red','Blue','Black/Red/White','White/Red/Black']})
display(iLoc)
def removeColor(main,sub):
for i in range(len(main)):
for j in str(sub[i]).split('/'):
main[i] = main[i].replace(j, '').replace(' ',' ').strip()
return main
iLoc["0"] = removeColor(iLoc["0"],iLoc["1"])
display(iLoc)
您的方法部分正確。
您需要從系列中提取值,並將每個主行替換為其來自相同索引的子字符串行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.