Python 清除dataframe列,从某些其他dataframe中显示的字符串中删除部分
我试图通过另一个数据帧的列中的值来清理一个数据帧中的数据。第一个数据帧包含分号分隔的值列表,第二个数据帧包含单个单词。 清理后,第一个数据帧不得包含第二个数据帧中的任何字Python 清除dataframe列,从某些其他dataframe中显示的字符串中删除部分,python,arrays,pandas,string,list,Python,Arrays,Pandas,String,List,我试图通过另一个数据帧的列中的值来清理一个数据帧中的数据。第一个数据帧包含分号分隔的值列表,第二个数据帧包含单个单词。 清理后,第一个数据帧不得包含第二个数据帧中的任何字 data df1 data df2 x1;x2;x3 x1 key2;key6;key7;key8 x2
data df1 data df2
x1;x2;x3 x1
key2;key6;key7;key8 x2
key6
key8
我需要从数据df1
中删除数据df2
中存在的值。我试图将不同dfs中的两列转换为两个列表,并从df1
的list1
中删除df2的list2
中的值
考虑到datadf2
列可能有超过1M行,而datadf1
列中的一行上有多个值,有没有一种没有循环的更快方法来实现这一点?基本上可以通过将数据帧的列拆分为足够多的列并替换值来实现:
import pandas as pd
df1 = pd.DataFrame({"a": ["x1;x2;x3", "key2;key6;key7;key8"]})
df2 = pd.DataFrame({"tbd": "x1,x2,key6,key8".split(",")})
print(df1)
print(df2)
# create a new df that contains splitted values as columns
df3 = df1["a"].str.split(";", expand=True).fillna(value="")
print(df3)
# replace non wanted values
df3.replace( df2["tbd"],"", inplace=True)
df3.replace( df3, None, "", inplace=True)
print(df3)
输出:
# df1
a
0 x1;x2;x3
1 key2;key6;key7;key8
# df2
tbd
0 x1
1 x2
2 key6
3 key8
# df3 (df1 column "a" after splitting into new df)
0 1 2 3
0 x1 x2 x3
1 key2 key6 key7 key8
# replacing all values from df3 that are in df2["tbd"]
0 1 2 3
0 x3
1 key2 key6 key7
您可能需要再次收集数据
要一次性清理df1
,您可以使用如下列表:
import pandas as pd
df1 = pd.DataFrame({"a": ["x1;x2;x3", "key2;key6;key7;key8"]})
df2 = pd.DataFrame({"tbd": "x1,x2,key6,key8".split(",")})
df1["a"] = [';'.join([i for i in v.split(";") # split and recombine again
if i not in frozenset(df2["tbd"])]) # remove i from v if in df2
for v in df1["a"]] # v == any rows of column
print(df1)
a
0 x3
1 key2;key7
此解决方案可以是和的答案的组合,但它不是这两个答案的纯副本。谢谢。最后一步是将结果值连接到df3中,并将其粘贴到初始df1中,对吗?是的,基本上在df1中,我必须保留DF2中不存在的df1中的值。由于第二个文件包含超过100万行的数据,有没有办法加快处理过程?非常感谢