在字符串后

时间:2019-01-29 15:51:34

标签: python string pandas series

我发现一些有用的examples拆分列,但没有一个比我尝试做的要具体。

我有一列包含州和学校信息的人,列表如下:

Col1
Miami, FLSchoolA
Charlotte, NCSchoolB

我想在字符串, ST之后进行分隔,但是显然状态是不同的。我希望这个例子看起来像这样:

Col1             Col2
Miami, FL        SchoolA
Charlotte, NC    SchoolB

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

您可以将.str.extract用于2个捕获组。

df.Col1.str.extract('(.*,\s[A-Z]{2})(.*)')

               0        1
0      Miami, FL  SchoolA
1  Charlotte, NC  SchoolB

答案 1 :(得分:2)

您可以将str.index用于切片:

df = pd.DataFrame({'Col1': ['Miami, FLSchoolA', 'Charlotte, NCSchoolB']})

def splitter(val):
    idx = val.index(',') + 4
    return val[:idx], val[idx:]

df['Col1'], df['Col2'] = list(zip(*map(splitter, df['Col1'])))

print(df)

#             Col1     Col2
# 0      Miami, FL  SchoolA
# 1  Charlotte, NC  SchoolB

答案 2 :(得分:0)

这里的其他答案似乎并不包括寻找状态的特定需求。我的建议:

df = pd.DataFrame({'Col1': ['Miami, FLSchoolA', 'Charlotte, NCSchoolB']})

states = """AK AL AR AZ CA CO CT DE FL GA HI IA ID IL IN KS KY LA MA MD ME
 MI MN MO MS MT NC ND NE NH NJ NM NV NY OH OK OR PA RI SC SD TN TX UT VA VT
 WA WI WV WY""".split()

def splitter(ser):
    state = [x for x in states if x in ser]
    if len(state) > 0:
        st = ', ' + state[0]
        a = ser.split(st)
        return [a[0] + st, a[1]]

df.Col1.transform(splitter)

返回一系列两个列表,可以轻松将其分为几列:

0        ['Miami, FL', 'SchoolA']
1    ['Charlotte, NC', 'SchoolB']
Name: Col1, dtype: object

可能存在一种将此条件写入pd.Series.str.split的方法,因此您可以放入expand=True中并一步一步完成。