#python #pandas
#python #pandas
Вопрос:
У меня есть следующий фрейм входных данных:
PRECISE 1 RE=130 VAL=5 LENGHT=8 TYPE=DEL AF=0.0005
PRECISE 8 RE=30 VAL=8 LENGHT=8 TYPE=INS AF=0.05
PRECISE 3 RE=13 VAL=85 LENGHT=8 TYPE=INV AF=0.08
PRECISE 7 RE=10 VAL=18 LENGHT=8 TYPE=DEL AF=0.001
Я хотел бы выбрать столбцы, если panda.Series содержит следующее значение ('RE=','AF=')
. Я не могу выбрать по имени столбца, поскольку в зависимости от версии инструмента, используемого для создания файла, оно может быть переменным. Но теги остаются неизменными в разных версиях инструмента.
Ожидаемый результат :
RE=130 AF=0.0005
RE=30 AF=0.05
RE=13 AF=0.08
RE=10 AF=0.001
Я попытался со следующим кодом :
RE_cols = [col for col in df_b.columns if df_b[col].str.contains('RE=')]
Но у меня есть следующее сообщение об ошибке, которое мне не удалось устранить :
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Любая помощь?
Комментарии:
1. Вычисляет
f_b[col].str.contains('RE=')
сам по себе. Вы получите серию значений bool. Отсюда и ваша ошибка. Вы можете свернуть это до скаляра с помощью.any()
или.all()
Ответ №1:
#import pandas
import pandas as pd
Настройка
Допустим, у вас есть фрейм данных:
data = {'data1': ['A', 'B', 'Cz', 'D'], 'data2': ['az', 'za', 'c', 'd']}
df = pd.DataFrame.from_dict(data, orient='index',
columns=['col1', 'col2', 'col3', 'col4'])
Который выглядит следующим образом:
Решение
Например, если вы хотите выбрать столбцы, содержащие букву z
:
Вы можете сделать:
some_string_the_column_needs_to_contain_to_be_selected = 'z'
filtered_df=df[[col for col in df.columns if any(df[col].str.contains(some_string_the_column_needs_to_contain_to_be_selected))]]
Ваш filtered_df
будет:
Как и ожидалось.