我的輸入:
df=(pd.DataFrame({'items':['foo','bar','xyz'],
'path':['c/folderOne/folderTwo/folderThree','c/folder1/folder2/folder3','c/folderO/folderT/folderTh'],
}))
在我想在串列中添加新的子字串并再次重新加入之后,我嘗試在列中插入path一些“修復” ,但我遇到了意外的問題。
我的代碼:'c/...NEWPATH
df['path'] = df['path'].map(lambda x: x.split("/"))
df['path'] = df['path'].map(lambda x: x.insert(1,'NEWPATH'))
df['path'] = df['path'].map(lambda x: x.join('/'))
代碼None在 column中回傳path,當我期望這樣的事情時,在我的代碼的第二行之后:
in columndf['path'] : ['c','NEWPATH','folderOne'....]等。對于我的列的每一行(單元格)。
uj5u.com熱心網友回復:
看起來你最好在這里使用正則運算式:
NEWPATH = 'abc'
df['path2'] = df['path'].str.replace('^([^/] /)', rf'\1{NEWPATH}/')
注意。為清楚起見,在此處分配給新列
輸出:
items path path2
0 foo c/folderOne/folderTwo/folderThree c/abc/folderOne/folderTwo/folderThree
1 bar c/folder1/folder2/folder3 c/abc/folder1/folder2/folder3
2 xyz c/folderO/folderT/folderTh c/abc/folderO/folderT/folderTh
在第 n 個目錄之后插入:
NEWPATH = 'abc'
df['path2'] = df['path'].str.replace('^(^(?:[^/] /){3})', rf'\1{NEWPATH}/')
或者
NEWPATH = 'abc'
N = 3
df['path2'] = df['path'].str.replace(f'^(^(?:[^/] /){{{N}}})', rf'\1{NEWPATH}/')
輸出:
items path path2
0 foo c/folderOne/folderTwo/folderThree c/folderOne/folderTwo/abc/folderThree
1 bar c/folder1/folder2/folder3 c/folder1/folder2/abc/folder3
2 xyz c/folderO/folderT/folderTh c/folderO/folderT/abc/folderTh
uj5u.com熱心網友回復:
問題insert在原地作業,因此None被退回。您可以將串列添加到拆分x然后加入:
def f(x):
s = x.split("/")
return '/'.join(s[:2] ['NEWPATH'] s[2:])
df['path'] = df['path'].map(f)
print (df)
items path
0 foo c/folderOne/NEWPATH/folderTwo/folderThree
1 bar c/folder1/NEWPATH/folder2/folder3
2 xyz c/folderO/NEWPATH/folderT/folderTh
uj5u.com熱心網友回復:
您也可以使用 a - 這里的map索引1lambda表示您要插入的位置
df['path'] = df['path'].str.split('/').map(lambda x: x[:1] ['NEWPATH'] x[1:]).str.join('/')
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/420931.html
標籤:
