根据序列或数组中的索引访问熊猫字符串列字符

时间:2018-10-05 09:43:28

标签: python string pandas numpy dataframe

我有一个pandas数据框列(系列),其中包含指向另一列的字符串元素内单个感兴趣字符的索引。有没有一种方法可以像矢量dataframe ['name']。str。*函数一样,基于索引列以向量化方式访问这些感兴趣的字符? [edit:参见下面的评论] 如果不是(或者说真的),您会说这里首选的方法是什么?

[编辑:正如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数组在熊猫包装程序中的实际行为,可能有用的是,如果有人可以解释一下,使包含索引的单独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方法有关,该方法对Series的所有元素使用 same参数进行操作,

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

1 个答案:

答案 0 :(得分:0)

  

我是否可以根据以下方式访问这些感兴趣的角色   以向量化的方式编制索引列,类似于   dataframe['name'].str.*个功能?

这里有一个误会。尽管有文档说明,但pd.Series.str方法在常规意义上不是向量化的。它们在高层循环中运行,通常反映Python内置的str方法中的功能。

实际上,在处理存储在Pandas数据帧中的字符串时,pd.Series.str方法通常性能不佳。方便的语法不应被视为对底层实现进行矢量化处理的标志。 dtype为object的系列通常是这种情况。

一种方法是使用列表理解:

df['myDesiredResult'] = [i[k] for i, k in zip(df['myStrCol'], df['myIndices'])]