В данных серии Pandas как получить ключи на основе данных, возвращаемых функцией? - PullRequest
0 голосов
/ 01 мая 2018

У меня есть рабочий скрипт, который создает массив каждой строки текста в файле. Эти данные передаются пандам Series(). Функция startswith("\n") используется для возврата логического True или False для каждой строки, чтобы определить, начинается ли она с \n (пустая строка). В настоящее время я использую счетчик i и условный оператор для итерации и сопоставления позиции, которую возвращает функция startswith().

import pandas as pd
import numpy as np
f = open('list-of-strings.txt','r')
lines = []
for line in f.xreadlines():
    lines.append(line)

s = pd.Series(lines)
i = 0
for b in s.str.startswith("\n"):
    if b == 0:
        print s[i],; i += 1
    else:
        i += 1

Я понял, что смотрю на это с двух разных подходов. Одним из них является непосредственная обработка каждого элемента, как он оценивается функцией startswith(). Поскольку функция startswith() возвращает логические значения, можно разрешить прямую обработку данных на основе возвращенных значений. Что-то вроде for each item in startswith(), if value returned is True, index = current_index, print s[index].

Помимо возможности печати только строк, которые оцениваются как False по startswith(), как бы я мог получить текущее значение ключа из startswith()?

Ссылки:
https://www.tutorialspoint.com/python_pandas/python_pandas_series.htm https://www.tutorialspoint.com/python_pandas/python_pandas_working_with_text_data.htm

1 Ответ

0 голосов
/ 01 мая 2018

Ваш вопрос на самом деле проще, чем тот, который указан в заголовке. Вы пытаетесь получить индексы для значений, для которых некоторые предикаты оцениваются положительно, а не передавать индекс в функцию.

В Пандах последний блок

i = 0
for b in s.str.startswith("\n"):
    if b == 0:
        print s[i],; i += 1
    else:
        i += 1

эквивалентно

print(s[~s.str.startswith('\n')].values)

Более того, вам для этого вообще не нужны панды:

print(''.join([l for l in in open('list-of-strings.txt','r') if not l.startswith('\n')]))

должен заменить весь ваш блок кода из вопроса.

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