【问题标题】:Accessing a pandas string column characters based on indices in a series or array根据系列或数组中的索引访问熊猫字符串列字符
【发布时间】:2019-03-10 18:59:16
【问题描述】:

我有一个 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 数组在 pandas 包装器中的实际行为方式可能有用,如果有人能解释拥有一个包含索引的单独 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])

在我看来,我想要的与子字符串相关的this suggestion 非常相似,但那里似乎还没有解决方案。除此之外,我发现的所有内容都与 Series.str 方法有关,这些方法使用 same 参数 对 Series 的所有元素进行操作,如下所示:

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

【问题讨论】:

    标签: python string pandas numpy dataframe


    【解决方案1】:

    有没有办法让我访问这些感兴趣的角色? 以矢量化方式索引列,类似于 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'])]
    

    【讨论】:

    • 很好的答案,谢谢。奇迹般有效。 (为了保持与您完整答案的联系,我在其中留下了我的误解并参考了您的更正。)
    猜你喜欢
    • 2020-12-31
    • 2014-10-03
    • 2022-07-27
    • 2013-07-21
    • 2021-09-25
    • 2016-02-06
    • 1970-01-01
    • 2018-11-01
    • 2022-01-12
    相关资源
    最近更新 更多