Python 如何将包含字符串和大量(数字)的列拆分为两列
我有一个列,其中有一些文本和金额值,需要将它们分开。比如:- “银行透支利息18465” 代码是用python编写的。我尝试了regex,但它会分割整个文本,也会分割用逗号分隔的值 我使用的代码是:-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,但它只是分割数值,并没有给出所需的结果。 输出应该类似于:- 银
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