关于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']

若有错误,敬请批评指正

欢迎关注公众号:驿路向北,与我进行交流

你可能感兴趣的:(关于python内置方法str.split()的一点认识)