Python 将列拆分为字符串后的两个空格
我发现一些拆分列的方法很有用,但没有一种像我尝试做的那样具体 我有一个包含州和学校信息的专栏,其中列出了如下人员:Python 将列拆分为字符串后的两个空格,python,string,pandas,series,Python,String,Pandas,Series,我发现一些拆分列的方法很有用,但没有一种像我尝试做的那样具体 我有一个包含州和学校信息的专栏,其中列出了如下人员: Col1 Miami, FLSchoolA Charlotte, NCSchoolB 我想在字符串,ST之后分开,但是很明显,状态是不同的。我希望此示例如下所示: Col1 Col2 Miami, FL SchoolA Charlotte, NC SchoolB 任何帮助都将不胜感激。您可以使用.str.extract与2个捕获组进行
Col1
Miami, FLSchoolA
Charlotte, NCSchoolB
我想在字符串,ST
之后分开,但是很明显,状态是不同的。我希望此示例如下所示:
Col1 Col2
Miami, FL SchoolA
Charlotte, NC SchoolB
任何帮助都将不胜感激。您可以使用
.str.extract
与2个捕获组进行此操作:
df.Col1.str.extract('(.*,\s[A-Z]{2})(.*)')
0 1
0 Miami, FL SchoolA
1 Charlotte, NC SchoolB
您可以将
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
这里的其他答案似乎不包括寻找州的具体需要。我的建议是:
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
,一步完成。@JRibkr.str.split
不是特别有用,因为这里我们需要在第一个字符串中包含拆分条件。向后看可能是可行的,但要拆分的实际模式是空的,这可能使其不可能+如果你想真正学究化,并且确保只包含状态,而不是例如,,GH
,那么将正则表达式更改为f'(.*,\s[{“|”)。使用@JoshFriedlander中的状态加入(状态)}{{2}(.*)
。但是如果你的数据足够干净的话,可能是杀伤力太大了。当我将.str.extract
函数分配给一列时,我丢失了分割的第二部分(学校)。如何将这些存储在数据框中?@a.powell。一个安全的替代方法是连接结果pd.concat([df,df.Col1.str.extract('(.*.\s[A-Z]{2})(.*]),axis=1)
,它只会将这两个拆分列附加到原始列。但是如果您不再关心原始数据,为什么不使用上面的DataFrame
输出(只需重命名列)?当我尝试仅使用数据帧时,它会将第二列返回为空。有什么线索吗?@a.powell我不知道。根据您提供的数据,分割似乎是可行的,如果您可以创建一个复制问题的模型,那么最好再问一个问题,因为评论中的长时间讨论通常是不受欢迎的。您可以使用df.to_dict()
轻松向我们提供有问题的数据。