将字符串中的连字符分隔数字展开到pandas中的范围内

时间:2017-09-19 19:31:26

标签: python pandas for-loop dataframe

我有一个pandas DataFrame,邮政编码的开头以下列形式区分:

def __str__

我需要用破折号打开数据,所以它将是:

region A 385
region B 656 - 659

我的代码

region B 656, 657, 658, 659

返回一个ValueError :('太多的值要解包(预期2)' 你能帮我解决一下这个错误吗?

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