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
相关产品推荐
相关产品推荐

