从另一个系列解析系列

2024-10-01 11:33:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解析一系列文本,使用一系列数字,如下面的代码,但我得到的回报是一系列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

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


Tags: 代码文本importnumpypandasasnp数字
3条回答

你可以^{}

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

或者使用^{}numData强制转换为迭代器,并使用^{}

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

我们将numData转换为迭代器,然后为apply中的每个切片调用next

如果实际上你不能切掉最后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

相关问题 更多 >