我有一个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)
答案 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'])]