фрейм данных pandas — выбор столбца

#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 будет:

введите описание изображения здесь

Как и ожидалось.