Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从数据帧中删除不在列表中的某些值?_Python_Pandas_Numpy - Fatal编程技术网

Python 如何从数据帧中删除不在列表中的某些值?

Python 如何从数据帧中删除不在列表中的某些值?,python,pandas,numpy,Python,Pandas,Numpy,通过编写以下代码,我创建了一个数据帧 data = [['A', 'B','D'], ['A','D'], ['F', 'G','C','B','A']] df = pd.DataFrame(data) df 我的目标是从数据帧中删除不在下面列表中的值 list_items = ['A','B','C'] 我的预期产出如下所示 我曾尝试遍历循环中的值并逐个检查,但假设数据帧的大小非常大,为91081616,列表中有130多个项目需要检查。在这种情况下,运行代码的时间太长。请建议实现预期输

通过编写以下代码,我创建了一个数据帧

data = [['A', 'B','D'], ['A','D'], ['F', 'G','C','B','A']] 
df = pd.DataFrame(data) 
df
我的目标是从数据帧中删除不在下面列表中的值

list_items = ['A','B','C']
我的预期产出如下所示

我曾尝试遍历循环中的值并逐个检查,但假设数据帧的大小非常大,为91081616,列表中有130多个项目需要检查。在这种情况下,运行代码的时间太长。请建议实现预期输出的最有效方法。

我不认为在熊猫中这样做是一个好主意,因为专栏在这里并不重要。使用列表更容易,如果您真的需要,最终可以将其转换为数据帧

# convert df to list of lists
data = df.values.tolist()
# filter each element of the list to contain only list_items values
data_filtered = [ [el for el in l if el in list_items] for l in data]
# convert back to dataframe
df_filtered = pd.DataFrame(data_filtered) 
print(df_filtered)
#   0   1    2
#0  A   B    None
#1  A   None None
#2  C   B    A

让我们试着不要使用for循环

s=df.where(df.isin(list_items)).reset_index().melt('index').dropna()
s=s.assign(Key=s.groupby('index').cumcount()).pivot('index','Key','value')
Key    0    1    2
index             
0      A    B  NaN
1      A  NaN  NaN
2      C    B    A
方法二不适合大数据帧

s=df.where(df.isin(list_items)).T.apply(lambda x : sorted(x,key=pd.isnull)).T.dropna(thresh=1, axis=1)
   0    1    2
0  A    B  NaN
1  A  NaN  NaN
2  C    B    A

是什么决定了行数和列数的变化方式?