You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python DataFrame移除千分位点后出现空字符,如何合并为完整数字?

问题:移除千分位分隔符后合并数字并去除空字符

原始DataFrame中的数字以点作为千分位分隔符(例如:3.200.000),我尝试通过以下代码移除该千分位分隔符:

pattern_shareholding_numbers = re.compile(r'[\d.]*\d+')

shareholding_percentage_df = df[(~df["Jumlah Lembar Saham"].str.startswith("Saham") & (df["Jabatan"] == "-"))]
shareholding_percentage_df = df[(~df["Jumlah Lembar Saham"].str.startswith("Jumlah Lembar Saham") & (df["Jabatan"] == "-"))]
shareholding_percentage_df.reset_index(drop=True, inplace=True)
shareholding_percentage_list = df["Jumlah Lembar Saham"].to_list()
shareholding_percentage_string = ' '.join(shareholding_percentage_list)
matches = pattern_shareholding_numbers.findall(shareholding_percentage_string)

matches_dot_removed = []
for dot in matches:
    dot_removed = []
    for e in dot:
        e = e.replace('.', '')
        e = e.replace('.', '')
        dot_removed.append(e)
    matches_dot_removed.append(dot_removed)

shareholding_percentage_float = str(matches_dot_removed).rstrip('')
print(shareholding_percentage_float)

代码成功移除了千分位分隔符,但返回结果包含空字符,形式如下:

[['3', '', '2', '0', '0', '', '0', '0', '0'], ['2', '', '9', '0', '0', '', '0', '0', '0'], ['2', '', '9', '0', '0', '', '0', '0', '0'], ['1', '', '0', '0', '0', '', '0', '0', '0']]

我需要移除空字符,将数字合并为完整形式,期望得到如下结果:

['3200000'], ['2900000'], ['2900000'], ['1000000']

解决方案

你的代码问题在于逐个字符遍历替换点,导致点被替换为空字符串后混入列表,产生空元素。直接对每个匹配到的字符串整体处理即可:

优化后的代码

import re

# 合并数据筛选条件,避免重复赋值覆盖结果
shareholding_percentage_df = df[(~df["Jumlah Lembar Saham"].str.startswith("Saham")) & 
                                (~df["Jumlah Lembar Saham"].str.startswith("Jumlah Lembar Saham")) & 
                                (df["Jabatan"] == "-")]
shareholding_percentage_df.reset_index(drop=True, inplace=True)

# 提取目标列数据并拼接成字符串
shareholding_percentage_list = shareholding_percentage_df["Jumlah Lembar Saham"].to_list()
shareholding_percentage_string = ' '.join(shareholding_percentage_list)

# 匹配带千分位分隔符的数字
pattern_shareholding_numbers = re.compile(r'[\d.]*\d+')
matches = pattern_shareholding_numbers.findall(shareholding_percentage_string)

# 移除每个匹配字符串中的点,生成期望的嵌套列表格式
result = [[num.replace('.', '')] for num in matches]

# 输出结果
for item in result:
    print(item)

关键修改说明

  • 合并筛选条件:原代码重复赋值shareholding_percentage_df,合并后避免覆盖之前的筛选结果。
  • 简化字符处理:不再逐个字符遍历,直接对每个匹配到的数字字符串执行replace('.', ''),一次性移除所有千分位分隔符。
  • 生成目标格式:用列表推导式直接构建[['数字'], ...]的嵌套列表结构。

运行后即可得到预期结果:

['3200000']
['2900000']
['2900000']
['1000000']

内容的提问来源于stack exchange,提问作者htm_01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:46:48