Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 Pandas-如果列值在列表(.csv)中,则从数据框中删除行_Python_Pandas_Dataframe_Csv - Fatal编程技术网

Python Pandas-如果列值在列表(.csv)中,则从数据框中删除行

Python Pandas-如果列值在列表(.csv)中,则从数据框中删除行,python,pandas,dataframe,csv,Python,Pandas,Dataframe,Csv,我有一个从SQL导入的pandas数据框,我想删除列表中列值所在的行,这些行是从csv文件中获取的。它看起来很简单,我查找了它,并使用.isin()尝试了几种方法,但这并没有像我预期的那样起作用 例如,从SQL导入的数据帧如下所示,我们称之为df: SKU Brand 0 AD31KL-A1 BrandA 1 BC31KL-B3 BrandB 2 DE31KL-D4 BrandC 3 FG31KL-F5 BrandD 我通过以下方式导入此列表: d

我有一个从SQL导入的pandas数据框,我想删除列表中列值所在的行,这些行是从csv文件中获取的。它看起来很简单,我查找了它,并使用
.isin()
尝试了几种方法,但这并没有像我预期的那样起作用

例如,从SQL导入的数据帧如下所示,我们称之为df:

    SKU        Brand
0  AD31KL-A1   BrandA
1  BC31KL-B3   BrandB
2  DE31KL-D4   BrandC
3  FG31KL-F5   BrandD
我通过以下方式导入此列表:

df2 = pd.read_csv("list.csv")
list = df2.apply(lambda x: x.tolist(), axis=1)
假设我打印了列表,这是我看到的:

[BC31KL-B3]
[DE31KL-D4]
Length: 2, dtype: object
然后我使用以下方法:

df = df[~df.SKU.isin(list)]
我希望得到这个结果(删除第一行和第二行的初始df,因为它们在列表中)

然而,事实并非如此。我得到了与最初完全相同的df,没有掉线,也没有任何类型的错误消息。我做错了什么?
我认为列表中的数据和df列中的数据可能不是同一类型,我尝试了摆弄
astype()
,但没有太大成功。也许我用错了


非常感谢您的帮助。谢谢

这条线似乎是你的问题:

list = df2.apply(lambda x: x.tolist(), axis=1)
df应用的结果是另一个df。假设.csv文件有一个名为SKU的列。您只能从该列中列出:

list = df2['SKU'].tolist()
下面的一些示例代码显示,只要在列/系列上调用
tolist()
,就可以将一列值转换为列表:

# Well, I don't have list.csv, so let me just create a dataframe
df = pd.DataFrame( ['AD31KL-A1','BC31KL-B3','DE31KL-D4','FG31KL-F5' ], columns = ['SKU'] )
print(df)
list =  df['SKU'].tolist() 
print( list ) 
以下是表示list.csv的df:

         SKU
0  AD31KL-A1
1  BC31KL-B3
2  DE31KL-D4
3  FG31KL-F5
以下是清单:

['AD31KL-A1', 'BC31KL-B3', 'DE31KL-D4', 'FG31KL-F5']
最后,如果没有列名,只需通过其整数值获取第一列即可:

df = pd.DataFrame( ['AD31KL-A1','BC31KL-B3','DE31KL-D4','FG31KL-F5' ] )
print(df)
list =  df.iloc[:, 0].tolist()  # first column of dataframe
print( list ) 

这条线似乎是你的问题:

list = df2.apply(lambda x: x.tolist(), axis=1)
df应用的结果是另一个df。假设.csv文件有一个名为SKU的列。您只能从该列中列出:

list = df2['SKU'].tolist()
下面的一些示例代码显示,只要在列/系列上调用
tolist()
,就可以将一列值转换为列表:

# Well, I don't have list.csv, so let me just create a dataframe
df = pd.DataFrame( ['AD31KL-A1','BC31KL-B3','DE31KL-D4','FG31KL-F5' ], columns = ['SKU'] )
print(df)
list =  df['SKU'].tolist() 
print( list ) 
以下是表示list.csv的df:

         SKU
0  AD31KL-A1
1  BC31KL-B3
2  DE31KL-D4
3  FG31KL-F5
以下是清单:

['AD31KL-A1', 'BC31KL-B3', 'DE31KL-D4', 'FG31KL-F5']
最后,如果没有列名,只需通过其整数值获取第一列即可:

df = pd.DataFrame( ['AD31KL-A1','BC31KL-B3','DE31KL-D4','FG31KL-F5' ] )
print(df)
list =  df.iloc[:, 0].tolist()  # first column of dataframe
print( list ) 

太好了,这看起来很有效,非常感谢!我不知道我的df.apply的结果是另一个df,而不是一个列表。太好了,这似乎起作用了,非常感谢!我不明白我的df.apply的结果是另一个df而不是一个列表。