#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 []