Python Pandas-如果列值在列表(.csv)中,则从数据框中删除行
我有一个从SQL导入的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
.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而不是一个列表。