我有一个从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)]
我希望得到这个(由于第1行和第2行在列表中,因此删除了初始df)
SKU Brand
0 AD31KL-A1 BrandA
3 FG31KL-F5 BrandD
但是这不会发生。我得到了与最初完全相同的df,没有掉线,也没有任何错误消息。我在做什么错了?
我认为列表和df列中的数据可能不是同一类型,因此我尝试摆弄astype()
,但没有成功。也许我用错了。
非常感谢您的帮助。谢谢!
答案 0 :(得分:0)
这行似乎是您的问题:
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 )