Доступ к символам столбца строки панды на основе индексов в серии или массиве - PullRequest
0 голосов
/ 05 октября 2018

У меня есть столбец данных (pandas) в столбце данных (серии), содержащий индексы одного интересующего символа внутри строковых элементов другого столбца.Есть ли способ для меня получить доступ к этим интересующим символам на основе столбца индекса в векторизованном виде, подобно функциям dataframe ['name']. Str. *? [править: см. Комментарий ниже] Если нет (или независимо от этого, на самом деле), что бы вы назвали предпочтительным подходом здесь?

[Правка: это предположение было неверным, так какуказал jpp, но я оставляю это здесь для прослеживаемости]

Я пытаюсь избежать ненужного многословия, такого как применение функции перевода с использованием map или необходимость создания отдельногорецепт индексации (например, словарь, содержащий индексы), чтобы сделать что-то вроде

myDataFrame['myDesiredResult'] = 
    myDataFrame['myStrCol'].apply(myCharacterExtractionFunction, myIndexingRecipe)

Я бы предпочел придерживаться numpy и pandas и не смешивать больше модулей, если это вообще возможно.

Иллюстрация того, как могут выглядеть данные:

     myStrCol  myIndices  myDesiredResult
0    ABC       1          B
1    DEF       0          D
2    GHI       2          I

Кроме того, и, возможно, полезно, чтобы понять, как на самом деле ведет себя массив numpy в оболочке панд, было бы здорово, если бы кто-то могобъясните, имеет ли смысл иметь отдельный массив с индексами, например:

import pandas
import numpy

myPandasStringSeries = pandas.Series(['ABC', 'DEF', 'GHI'])
myPandasStringSeries
    0    ABC
    1    DEF
    2    GHI

myNumpyIndexArray = numpy.array([1, 0, 2])
myNumpyIndexArray
    array([1, 0, 2])

Мне кажется, что то, что я хочу, очень похоже на это предложение , касающееся подстрок, но, похоже, там пока нет решения.Кроме того, все, что я обнаружил, относится к методам Series.str, которые работают с использованием одного и того же параметра для всех элементов серии, например:

myDataFrame['newColumn'] = myDataFrame['oldColumn'].str.split('_').str.get(0)

1 Ответ

0 голосов
/ 05 октября 2018

Есть ли способ для меня получить доступ к этим интересным символам на основе индексного столбца в векторизации, аналогично dataframe['name'].str.* функциям?

Здесь есть недоразумение,Несмотря на документацию, методы pd.Series.str не векторизованы в общепринятом смысле.Они работают в высокоуровневом цикле и часто отражают функциональность встроенных в Python методов str.

На самом деле, pd.Series.str методы обычно неэффективны простые списки при работе со строкамихранится в данных Pandas.Удобный синтаксис не должен восприниматься как признак векторизации базовой реализации.Это часто имеет место для рядов с dtype object.

. Один из подходов заключается в использовании списочного понимания:

df['myDesiredResult'] = [i[k] for i, k in zip(df['myStrCol'], df['myIndices'])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...