我有一个类似以下的df
ES1!
如果列在列表中,我想将部分字符串替换为“”,还要将它们保留在单独的列中。说我的清单为例;
ColumnA
"ABC X1"
"BCS X2"
"CCC X3"
所以我想要的输出是
["X1","X3"]
我知道如何使用ColumnA ColumnB
"ABC" "X1"
"BCS X2"
"CCC" "X3"
替换值,而且我还认为我可以通过使用for循环并将每个值与列表中的值进行比较,并保持它们是否匹配来解决问题,但是也许有更好的解决方案吗?
答案 0 :(得分:4)
您可以做两次:
ColumnA ColumnB
0 ABC X1
1 BCS X2 NaN
2 CCC X3
输出:
{{1}}
答案 1 :(得分:2)
lst = ["X1","X3"]
df = pd.DataFrame({'ColumnA': ["ABC X1", "BCS X2", "CCC X3"]})
import re
r = re.compile('|'.join(r'(\b{}\b)'.format(re.escape(v)) for v in lst))
df = df.ColumnA.apply(lambda x: pd.Series([v.strip() for v in r.split(x) if v])) \
.rename(columns={0:'ColumnA', 1:'ColumnB'}) \
.fillna('')
print(df)
打印:
ColumnA ColumnB
0 ABC X1
1 BCS X2
2 CCC X3
答案 2 :(得分:2)
使用split
和isin
的替代方法:
l = ["X1","X3"]
s = df.pop("ColumnA").str.strip('"')
df[['ColumnA','ColumnB']] = s.str.split(expand=True).where(lambda x: x[1].isin(l))
df['ColumnA'] = df['ColumnA'].fillna(s)
print(df)
ColumnA ColumnB
0 ABC X1
1 BCS X2 NaN
2 CCC X3
答案 3 :(得分:1)
如果列表的任何元素后跟str.split
,则可以在空格前使用(?=
,并使用正向超前正则表达式l = ["X1","X3"]
c = '|'.join(l)
df_ = (df['ColumnA'].str.split(f' (?={c})', expand=True)
.rename(columns={0:'ColumnA', 1:'ColumnB'})
.fillna(''))
print (df_)
ColumnA ColumnB
0 ABC X1
1 BCS X2
2 CCC X3
df['ColumnB'] = df.ColumnA.str.extract(f'({"|".join(strs)})')[0]
df['ColumnA'] =df.ColumnA.replace(strs,'', regex=True)
答案 4 :(得分:1)
尝试一下:
def match(_):
for m in match_lst:
if m in _:
return ','.join(_.split())
return f"{_},"
df = df['ColumnA'].apply(match).str.split(',', 1, expand=True)
df.columns = ['ColumnA', 'ColumnB']
答案 5 :(得分:1)
首先让我们找到需要修改的行:
df = pd.DataFrame({'ColumnA': ["ABC X1", "BCS X2", "CCC X3"]})
values = ["X1","X3"]
columns_to_modify = df['ColumnA'].str.contains('|'.join(values))
然后我们创建一个带有空字符串的ColumnB:
df['ColumnB'] = ''
并将仅需要修改的行拆分到新列上:
df[columns_to_modify] = df['ColumnA'].str.split(expand=True)[columns_to_modify]
输出:
ColumnA ColumnB
0 ABC X1
1 BCS X2
2 CCC X3
答案 6 :(得分:0)
这是一种解决方法:
remDr$navigate("https://maps.gsi.go.jp")
webElem <- remDr$findElement(using = "xpath","//input[@id='query']")
webElem$clickElement()
webElem$sendKeysToElement(list("茨城県行方郡玉造町", key = "enter"))
webElem2 <- remDr$findElement(using = "xpath","//div[@class='searchresultdialog_ul_frame']//a")
webElem2$clickElement()
使用Pandas字符串函数的较短语法