python的str.split()使用方法

问题:

如何利用python将字符串"a,b,c,d\n1,2,3,4\n5,6,7,8\n9,10,11,12"转换成下表格式,如图所示:

观察到在字符串中,实际上每隔4个字符有一个换行符'\n',所以可以利用字符串的split方法进行拆分,返回一个如下的列表:

['a,b,c,d','1,2,3,4','5,6,7,8','9,10,11,12']

然后对列表中的每个元素再次使用split方法,返回如下的列表:

[['a','b','c','d'],[1,2,3,4],[5,6,7,8],[9,10,11,12]]

这样就可以利用DataFrame生成上图的表格了。

代码如下:

import pandas as pd

s = "a,b,c,d\n1,2,3,4\n5,6,7,8\n9,10,11,12"

lst = []

for sep in s.split('\n'):

       lst.append(sep.split(','))

df = pd.DataFrame(lst[1:], columns=lst[0])

对上述代码,可以利用列表推导式来进行改写一下,提升效率

import pandas as pd

s = "a,b,c,d\n1,2,3,4\n5,6,7,8\n9,10,11,12"

lst = [sep.split(',') for sep in s.split('\n')]

df = pd.DataFrame(lst[1:], columns=lst[0])

小结:

str.split(sep=None, maxsplit=-1):该方法为Python的内置方法,以列表的形式返回分割后的元素;

  • sep:默认值是以连续的空格、换行符、制表符作为分割符
s = 'a b c'
​
s.split() # ['a', 'b', 'c']

备注:

1)无论元素之间的空格、换行符、制表符数量(且可以混用)(n>=1)为多少,且为连续的,都将作为一个分隔符进行分割,如:

s = 'a b               cd'
​
s.split()   # ['a', 'b', 'c']

s = 'a b     \n\n     cd'
s.split()   # ['a', 'b' ,'c']

2)若字符串各元素之间没有空格,且sep=None,返回整个字符串

s = 'abcd'
​
s.split()   # ['abcd']

3)若字符串内容恰好为分隔符,则会返回两个空字符列表

s = 'abcd'
s.split('abcd')  # ['','']
  • maxsplit:分割的最大次数,为分割几次的意思,从最左侧开始
s = 'a<>b<>c<>d'
​
#maxsplit=-1没有限制,能分几次分几次 
s.split(sep='<>', maxsplit=-1)  # ['a', 'b', 'c', 'd']
​
#maxsplit=0,表示不分割
s.split(sep='<>', maxsplit=0)   #   ['a<>b<>c<>d']
​
#maxsplit=1,表示分割一次
s.split(sep='<>', maxsplit=1)   #   ['a', 'b<>c<>d']
​
#maxsplit=10,当maxsplit设定的值超过最大可分割次数时,和maxsplit=-1一样,能分几次分几次
s.split(sep='<>', maxsplit=10)  # ['a', 'b', 'c', 'd']

欢迎批评指正

编辑于 2019-11-16 21:50