Pandas - Удалить строки из фрейма данных, если значение столбца находится в списке (.csv) - PullRequest
0 голосов
/ 06 августа 2020

У меня есть pandas фрейм данных, импортированный из SQL, и я хотел бы удалить строки, для которых значение столбца находится в списке, который я получаю из файла 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 со строками 1 и 2 отброшен, потому что они находятся в списке)

    SKU        Brand
0  AD31KL-A1   BrandA
3  FG31KL-F5   BrandD

Однако это не то, что происходит . Я получаю тот же самый df, что и изначально, без выпадения строк, а также без каких-либо сообщений об ошибках. Что я делаю не так ? Я думал, что данные в списке и в столбце df могут быть разных типов, и я попытался поиграть с astype(), но без особого успеха. Возможно, я неправильно его использую.

Буду признателен за любую помощь. Спасибо!

1 Ответ

0 голосов
/ 06 августа 2020

Похоже, эта строка - ваша проблема:

list = df2.apply(lambda x: x.tolist(), axis=1)

Результат df apply - другой 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 ) 

Вот df, представляющий list.csv:

         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 ) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...