问题:
如何利用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']
欢迎批评指正