从另一个系列解析熊猫系列

时间:2020-06-05 19:22:09

标签: python pandas

我试图使用一系列数字(如下面的代码)解析一系列文本,但作为回报,我得到的只是一系列NaN。

import numpy as np
import pandas as pd
numData = np.array([4,6,4,3,6])
txtData = np.array(['bluebox','yellowbox','greybox','redbox','orangebox'])
n = pd.Series(numData)
t = pd.Series(txtData)
x = t.str[:n]
print (x)

输出是

0   NaN
1   NaN
2   NaN
3   NaN
4   NaN

我希望输出为

0      blue
1    yellow
2      grey
3       red
4    orange

有没有简单的方法可以做到这一点。

3 个答案:

答案 0 :(得分:4)

如果实际上您无法截断最后3个字符并且需要依赖切片范围,则可以使用简单的列表理解。如果不能保证数据全部为字符串,或者end可能超过字符串的长度,则需要进行错误处理。

pd.Series([x[:end] for x,end in zip(t,n)], index=t.index)

0      blue
1    yellow
2      grey
3       red
4    orange
dtype: object

答案 1 :(得分:3)

您可以pd.Series.str.slice

t.str.slice(stop=-3)
# short hand for this is t.str[:-3]
0      blue
1    yellow
2      grey
3       red
4    orange
dtype: object

或使用iternumData投射为 iterator ,并使用slice

it = iter(numData)
t.map(lambda x:x[slice(next(it))])
0      blue
1    yellow
2      grey
3       red
4    orange
dtype: object

答案 2 :(得分:2)

numdata_iter = iter(numData)
x = t.apply(lambda text: text[:next(numdata_iter)])

我们将numData变成一个迭代器,然后为next中的每个切片在其上调用apply