我正在尝试从所有没有意义的术语中清除数据框中一列中的列表。
例如
Col New_Col
VM ['#']
JS [ '/','/UTENTI/','//utilsit/promo', '/notifiche/']
www.facebook.com ['https://www.facebook.com/','https://twitter.com/']
FA ['/nordest/venezia/','/nordest/treviso/']
我想从列中的每个列表(行)中删除所有
https, http
或//
开头New_Col
中包含Col作为子集(例如:www.facebook.com
中包含https://www.facebook.com/
,所以我应该删除它,不管它是否以https
开头)< / li>
我试图编写以下代码:
prefixes=['http','https','//']
for word in df['New_Col']:
if word.startswith(prefixes):
list.remove(word)
print (df['New_Col'])
无论怎么说
“列表”对象没有属性“ startswith”
(属性错误)。 我想我在代码上方考虑列表而不是列表列。
您能帮我了解如何做吗?
答案 0 :(得分:0)
创建一个函数以使用正则表达式删除所需的单词,然后将其应用于dataframe列,如下所示:
df['ColName'].apply(lambda x: func(x))
此处 func 是用于获取 ColName 列的每一行并返回所需结果的函数
答案 1 :(得分:0)
使用axis=1
上的DataFrame.apply
以及自定义过滤器功能fx
:
import re
fx = lambda s: [w for w in s['New_Col'] if s['Col'] not in w and re.match(r'^https?|//', w)]
df['New_Col'] = df.apply(fx, axis=1)
# print(df)
Col New_Col
0 VM []
1 JS [//utilsit/promo]
2 www.facebook.com [https://twitter.com/]
3 FA []