Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在数据框中拆分文本和数字_Python_Pandas_Dataframe - Fatal编程技术网

Python在数据框中拆分文本和数字

Python在数据框中拆分文本和数字,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个dataframe df1,列名称Acc Number作为第一列,数据如下所示: Acc Number ASC100.1 MJT122 ASC120.4 XTY111 我需要制作一个新的dataframe df2,它将有两列,第一列有文本部分,第二列有数字,因此所需的输出是: Text Number ASC 100.1 MJT 122 ASC 100.4 XTY 111 我该怎么做呢 谢谢 您可以这样做: import pandas as pd

我有一个dataframe df1,列名称Acc Number作为第一列,数据如下所示:

Acc Number
ASC100.1
MJT122
ASC120.4
XTY111
我需要制作一个新的dataframe df2,它将有两列,第一列有文本部分,第二列有数字,因此所需的输出是:

Text    Number 
ASC     100.1
MJT     122
ASC     100.4
XTY     111
我该怎么做呢


谢谢

您可以这样做:

import pandas as pd

data = ['ASC100.1',
'MJT122',
'ASC120.4',
'XTY111']

df = pd.DataFrame(data=data, columns=['col'])

result = df.col.str.extract('([a-zA-Z]+)([^a-zA-Z]+)', expand=True)
result.columns = ['Text', 'Number']
print(result)
输出

  Text Number
0  ASC  100.1
1  MJT    122
2  ASC  120.4
3  XTY    111
模式
([a-zA-Z]+)([^a-zA-Z]+)
表示匹配一组字母:
([a-zA-Z]+)
后跟一组非字母:
([^a-zA-Z]+)
。更安全的替代方法是使用以下正则表达式:
([A-zA-Z]+)(\d++.?\d+
,假设数字最多只能有一个点

进一步

  • 关于的文档使用Python编写
  • 有关的文档

  • 谢谢Daniel,str.extract起作用了,为什么正则表达式会是一个更安全的选择呢?因为它将只匹配并且只匹配其中可能有一个点的数字。