Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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_Split - Fatal编程技术网

Python 如何将包含字符串和大量(数字)的列拆分为两列

Python 如何将包含字符串和大量(数字)的列拆分为两列,python,pandas,dataframe,split,Python,Pandas,Dataframe,Split,我有一个列,其中有一些文本和金额值,需要将它们分开。比如:- “银行透支利息18465” 代码是用python编写的。我尝试了regex,但它会分割整个文本,也会分割用逗号分隔的值 我使用的代码是:- for i in df['row_item']: strings = i print(re.findall(r'(\w+?)(\d+)', strings)) 我对上面的代码进行了treid,但它只是分割数值,并没有给出所需的结果。 输出应该类似于:- 银

我有一个列,其中有一些文本和金额值,需要将它们分开。比如:- “银行透支利息18465”

代码是用python编写的。我尝试了regex,但它会分割整个文本,也会分割用逗号分隔的值

我使用的代码是:-

    for i in df['row_item']:
        strings = i
        print(re.findall(r'(\w+?)(\d+)', strings))
我对上面的代码进行了treid,但它只是分割数值,并没有给出所需的结果。 输出应该类似于:- 银行透支利息“18465” 结果我得到:-
[('1','8'),('4','65')]

银行透支利息18465.rsplit('1','1)
给出
['Bank透支利息,'18465']
。但是,如果数字部分中有空格,您将遇到问题。

“银行透支利息18465”。rsplit(“”,1)
给出
[“银行透支利息”,“18465]”
。但是,如果数字部分中有空格,则会遇到问题。

尝试将最后一行替换为:

print(关于findall(“([\D]+)([\D\,]+)”,字符串))


我注意到您可能来自欧洲大陆,因为您使用“,”作为小数分隔符(即一半是0,5)。当“.”用作十进制分隔符(即0.5)时,上述代码将不起作用。

尝试将最后一行替换为:

print(关于findall(“([\D]+)([\D\,]+)”,字符串))


我注意到您可能来自欧洲大陆,因为您使用“,”作为小数分隔符(即一半是0,5)。当“.”用作十进制分隔符(即0.5)时,上述代码将不起作用。

尝试使用正则表达式应适用于以下情况:

数据帧示例: 解决方案:
str.extract()
与匹配的组一
(\w+\s+\w+\s+\w+)
用于字符集,另一组用于
(\d+\,\d+)
数字匹配

>>> df['col'].str.extract('(\w+\s+\w+\s+\w+)\s+(\d+\,\d+)')
                         0       1
0  Bank overdraft interest  18,465
1  Bank overdraft interest  10,465
2  Bank overdraft interest  13,465
由于默认情况下会将列名称指定为
0
1
等等,因此您可以使用
DataFrame.rename()
动态重命名它们作为所需的列名

在其他情况下,如果您只想提取
数值
值/获取带有数值的新数据框,或者只想分配一个额外的数值列以提取并添加到同一数据框,请尝试下面的操作

仅从DataFrame列中提取数值

>>> df['col'].str.extract('(\d+\,\d+)')
0    18,465
1    10,465
2    13,465
Name: col, dtype: object
提取
数值
值并将列
num\u col
分配回同一数据帧

>>> df = df.assign(num_col=df['col'].str.extract('(\d+\,\d+)'))
>>> df 
                              col num_col
0  Bank overdraft interest 18,465  18,465
1  Bank overdraft interest 10,465  10,465
2  Bank overdraft interest 13,465  13,465

如果您只想查看我们提取的
num\u col
,那么我们可以使用以下内容

>>> del df['col']
>>> df
  num_call
0   18,465
1   10,465
2   13,465
使用命名组的另一个技巧将成为结果中的列名本身

请参阅文档

df.col.str.extract('(?P\w+\s+\w+\s+\w+\s+)(?P\d+\,\d+),expand=True) 字符串\u列数字\u列 0银行透支利息18465 1银行透支利息10465 2银行透支利息13465 或

df.col.str.extract('(?P\D+)\s+(?P\D+\,\D+),expand=True) 字符串\u列数字\u列 0银行透支利息18465 1银行透支利息10465 2银行透支利息13465
使用pandas时,尝试使用正则表达式应适用于以下情况:

数据帧示例: 解决方案:
str.extract()
与匹配的组一
(\w+\s+\w+\s+\w+)
用于字符集,另一组用于
(\d+\,\d+)
数字匹配

>>> df['col'].str.extract('(\w+\s+\w+\s+\w+)\s+(\d+\,\d+)')
                         0       1
0  Bank overdraft interest  18,465
1  Bank overdraft interest  10,465
2  Bank overdraft interest  13,465
由于默认情况下会将列名称指定为
0
1
等等,因此您可以使用
DataFrame.rename()
动态重命名它们作为所需的列名

在其他情况下,如果您只想提取
数值
值/获取带有数值的新数据框,或者只想分配一个额外的数值列以提取并添加到同一数据框,请尝试下面的操作

仅从DataFrame列中提取数值

>>> df['col'].str.extract('(\d+\,\d+)')
0    18,465
1    10,465
2    13,465
Name: col, dtype: object
提取
数值
值并将列
num\u col
分配回同一数据帧

>>> df = df.assign(num_col=df['col'].str.extract('(\d+\,\d+)'))
>>> df 
                              col num_col
0  Bank overdraft interest 18,465  18,465
1  Bank overdraft interest 10,465  10,465
2  Bank overdraft interest 13,465  13,465

如果您只想查看我们提取的
num\u col
,那么我们可以使用以下内容

>>> del df['col']
>>> df
  num_call
0   18,465
1   10,465
2   13,465
使用命名组的另一个技巧将成为结果中的列名本身

请参阅文档

df.col.str.extract('(?P\w+\s+\w+\s+\w+\s+)(?P\d+\,\d+),expand=True) 字符串\u列数字\u列 0银行透支利息18465 1银行透支利息10465 2银行透支利息13465 或

df.col.str.extract('(?P\D+)\s+(?P\D+\,\D+),expand=True) 字符串\u列数字\u列 0银行透支利息18465 1银行透支利息10465 2银行透支利息13465
是否所有数值都有逗号,或者有些数值类似于
53
127
6
,有些数值类似于发布的示例?是否有些值有多个逗号,如
11234567
?可能重复的是,所有值都有逗号,少数值有多个逗号。此外,您可以使用正则表达式拆分列中的所有行,而无需使用循环。请参阅pandas解决方案。是否所有数值都有逗号,或是类似
53
127
6
和一些类似的示例发布?有些值是否有多个逗号,如
11234567
?可能重复的是,所有值都有逗号,很少有值有多个逗号。此外,您可以使用正则表达式拆分列中的所有行,而不使用循环。请参阅pandas解决方案。它适用于数字部分,但也用于分隔文本,['3)财务,“,”成本“]这是数字部分的工作,但它也分离文本,['3)财务,“,”成本“]
>>> df.col.str.extract('(?P<string_col>\D+)\s+(?P<numeric_col>\d+\,\d+)', expand=True)
                string_col numeric_col
0  Bank overdraft interest      18,465
1  Bank overdraft interest      10,465
2  Bank overdraft interest      13,465