как фильтровать фрейм данных pandas на основе пользовательских данных из конфигурационного файла (текстового или CSV) config сообщит значения фильтра и столбец для фильтрации - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть фрейм данных, созданный из файла CSV, и мне нужна помощь для фильтрации фрейма данных на основе входных данных из файла конфигурации (это может быть текст или CSV).Файл конфигурации будет содержать имя столбца, по которому я должен фильтровать, и значения или условия, по которым я должен фильтровать.На данный момент у меня есть следующий код

import pandas as pd
import os
import time
import csv
import datetime
import sys


file_loc = sys.argv[1]

input_file_1 = 'mapping_config_1.txt'

file_det = os.path.join(file_loc, input_file_1)

file_details = pd.read_csv(file_det, header = 0, delimiter = "\t")

df = pd.read_csv(r'C:\filter\test.txt', sep = "|")

for index, row in file_details.iterrows():

  filter_col = row('Target_Column')

  filter = row['Filter']

  df = df.loc[df['filter_col'].isin(filter)]

  df.head(1000).to_csv(os.path.join(file_loc, 'output.txt'), sep = "|", index = False)

мой текстовый файл конфигурации выглядит так, мой фрейм данных содержит столбец с именем

Client_Product
Filter  Target_Column
10170   Client_Product

Я получаю 'Type Error' : series object is not callable

Я ищу любой подход, где я могу передать условия фильтра из файла конфигурации в программу Python

1 Ответ

0 голосов
/ 24 февраля 2019

выглядит в принципе нормально.Ошибка, которую вы получаете, связана со строкой filter_col = row('Target_Column'), где вы используете скобки () вместо скобок []

Другие проблемы: pd.Series.isin ожидает список, но вы предоставляетеэто единственное значение.Вы можете просто заменить эти первые три строки на df = df.loc[df[row['Target_Column']] == row['Filter']]

. Это также позволяет избежать создания переменной с именем filter, поскольку она перезаписывает встроенный python , и вам следует избегать этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...