Python — поиск элемента в списке внутри строк фрейма данных

#python #python-3.x #pandas

#python #python-3.x #панды

Вопрос:

Я пытаюсь захватить элементы внутри фрейма данных / панд, которые находятся в формате списка. Ниже приводится весь список, если строка существует, как мне захватывать элементы только по строкам для определенной строки и игнорировать остальные?

Вот что я попробовал…

 l1 = [1,2,3,4,5,6]
l2 = ['hello world n my world','world is a great place n we live in it','planet earth',np.NaN,'n save the water','']

df = pd.DataFrame(list(zip(l1,l2)),
            columns=['id','sentence'])
df['sentence_split'] = df['sentence'].str.split('n')
print(df)
  

результат этого кода:

 df[df.sentence_split.str.join(' ').str.contains('world', na=False)]  # does the trick but still not exactly what I am looking for. 


id  sentence                                  sentence_split
1   hello world n my world                   [hello world , my world]
2   world is a great place n we live in it   [world is a great place , we live in it]
  

но поиск:

 id  sentence                                  sentence_split
1   hello world n my world                   hello world; my world
2   world is a great place n we live in it   world is a great place
  

Ответ №1:

Вы хотите выполнить поиск строки в списке в серии. Один из подходов заключается в:

 # Drop NaN rows
df = df.dropna(subset=["sentence_split"])
  

Примените функцию, которая сохраняет только элементы в списках, которые вы ищете

 # Apply this lamda function
df["sentence_split"] = df["sentence_split"].apply(lambda x: [i for i in x if "world" in i])

   id                                 sentence             sentence_split
0   1                  hello world n my world  [hello world ,  my world]
1   2  world is a great place n we live in it  [world is a great place ]
2   3                             planet earth                         []
4   5                        n save the water                         []
5   6                                                                  []