我有一个pandas DataFrame,邮政编码的开头以下列形式区分:
def __str__
我需要用破折号打开数据,所以它将是:
region A 385
region B 656 - 659
我的代码
region B 656, 657, 658, 659
返回一个ValueError :('太多的值要解包(预期2)' 你能帮我解决一下这个错误吗?
答案 0 :(得分:1)
str.split
后跟apply
似乎是这样做的:
print(df)
region postcode
0 region A 385
1 region B 656 - 659
df['Unwrapped'] = df.postcode.str.split('\s*-\s*')\
.apply(lambda x: range(int(x[0]), int(x[-1]) + 1))
print(df['Unwrapped'])
0 (385)
1 (656, 657, 658, 659)
Name: Unwrapped, dtype: object
答案 1 :(得分:1)
@cᴏʟᴅsᴘᴇᴇᴅ的答案很棒。我很无聊,想写点什么。
idx = pd.MultiIndex.from_product([df.index, [0, 1]], names=[None, 'match'])
d = df.postcode.str.extractall('(\d+)').reindex(idx).ffill().astype(int)[0]
d.unstack().add([0, 1]).apply(lambda x: list(range(*x)), 1)
0 [385]
1 [656, 657, 658, 659]
dtype: object