我发现一些有用的examples拆分列,但没有一个比我尝试做的要具体。
我有一列包含州和学校信息的人,列表如下:
Col1
Miami, FLSchoolA
Charlotte, NCSchoolB
我想在字符串, ST
之后进行分隔,但是显然状态是不同的。我希望这个例子看起来像这样:
Col1 Col2
Miami, FL SchoolA
Charlotte, NC SchoolB
任何帮助将不胜感激。
答案 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
中并一步一步完成。