簡體   English   中英

從 dataframe 中刪除列表元素

[英]removing a list element from a dataframe

如果它匹配給定的條件,我想刪除一個列表字符串元素。 我的 dataframe 中的“流派”列包含所有可能流派的列表。 我想從整個 Z6A8064B5DF4794555500553C47C55057DZ 中刪除流派條目

removing = df['genres']
for row in removing:
    for j in range(len(row)):
        print(row[j])
        if row[j] == 'روايات وقصص':
            print('bingo')
            print(row)
            print(row[j])
            print(j)
            print(df['genres'].pop(j))

這段代碼給了我以下錯誤:

   3626     #  InvalidIndexError. Otherwise we fall through and re-raise
   3627     #  the TypeError.
   3628     self._check_indexing_error(key)

我想要實現的一個例子:這就是我現在得到的

df['genres'][3] = [روايات وقصص, روايات رومانسية, روايات خيالية] 

這就是我想要實現的

df['genres'][3] =  [ روايات رومانسية, روايات خيالية] 


    

這就是我的 dataframe 的樣子

代碼片段應該可以解決您的用例:

df = df[df['genres'] != 'روايات وقصص']

嘗試:

s = df["genres"].transform(lambda x: "روایات وقصص" in x)
df.drop(s[s].index, inplace=True)

這個鏈接& 很有幫助

我建議一個小的解決方法:

示例 dataframe:

import pandas as pd

df = pd.DataFrame([['movie_A', 'movie_B', 'movie_C'],
    [['action', 'comedy'], ['thriller', 'action'], ['drama']]]).T
df.columns = ['name', 'genres']

將您的流派列擴展到多個列:

df = pd.concat([df.drop(columns='genres'), pd.DataFrame(df['genres'].tolist(), 
    index=df.index).add_prefix('genre_tmp')], axis=1)

替換您希望排除的流派(本例中的“動作”,假設流派名稱未出現在其他列中):

df.replace({'action': None}, inplace=True)

生成包含所有流派的列作為列表。

genres_list = df[df.columns[df.columns.str.contains('genre_tmp')]].values.tolist()
for entry in genres_list:
    if None in entry:
        entry.remove(None)
df['genres'] = genres_list

最后,刪除“genres_tmp”列:

df = df[df.columns[~df.columns.str.contains('genre_tmp')]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM