如何通过索引修改DataFrame行值?加密货币价格列数据清理求助
解决加密货币价格数据重复混合问题
问题背景
爬取crypto.com的加密货币价格数据并存储为pandas DataFrame后,发现Price列存在值重复混合的问题,示例数据如下:
Name Price 24H CHANGE 0 BBitcoinBTC 16.678,36$16.678,36+0,32% +0,32% 1 EEthereumETH $1.230,40$1.230,40+0,52% +0,52% 2 UTetherUSDT $1,02$1,02-0,01% -0,01% 3 BBNBBNB $315,46$315,46-0,64% -0,64% 4 UUSD CoinUSDC $1,00$1,00+0,00% +0,00% 5 BBinance USDBUSD $1,00$1,00+0,00% +0,00% 6 XXRPXRP $0,4067$0,4067-0,13% -0,13% 7 DDogecoinDOGE $0,1052$0,1052+13,73% +13,73% 8 ACardanoADA $0,3232$0,3232+0,98% +0,98% 9 MPolygonMATIC $0,8727$0,8727+1,20% +1,20% 10 DPolkadotDOT $5,48$5,48+0,79% +0,79%
现有尝试
已使用正则表达式提取出正确的价格值,但尚未实现批量替换:
import re pattern = re.compile(r'(\$.*)(\$)') for value in df['Price']: value = pattern.search(value) print(value.group(1))
提取结果:
$16.684,53 $1.230,25 $1,02 $315,56 $1,00 $1,00 $0,4078 $0,105 $0,3236 $0,8733
解决方案
1. 批量修复Price列的重复值
无需循环遍历,直接使用pandas的字符串处理方法结合正则实现批量替换,推荐两种方式:
方法一:基于正则提取目标值
优化正则表达式以兼容所有格式(包括开头无$的情况),用str.extract批量提取正确价格:
import re import pandas as pd # 匹配第一个价格片段(支持带/不带$的格式),直到下一个$出现 pattern = re.compile(r'(\$?[\d.,]+)(?=\$)') df['Price'] = df['Price'].str.extract(pattern, expand=False) # 为开头无$的价格补充$符号 df['Price'] = df['Price'].apply(lambda x: f'${x}' if not x.startswith('$') else x)
方法二:利用字符串拆分简化处理
由于价格是重复出现的,可直接按$拆分字符串后取有效部分:
# 拆分字符串,取第一个价格片段 df['Price'] = df['Price'].apply(lambda x: x.split('$')[1] if x.startswith('$') else x.split('$')[0]) # 统一补充$符号 df['Price'] = '$' + df['Price']
2. 通过索引修改DataFrame行值
pandas提供loc方法可精准按索引修改行/列值,常见用法如下:
- 修改单行单列:
# 修改索引为0的行的Price列 df.loc[0, 'Price'] = '$16.678,36'
- 修改多行单列:
# 修改索引0和1的行的Price列 df.loc[[0, 1], 'Price'] = ['$16.678,36', '$1.230,40']
- 修改整行所有列:
# 修改索引为0的整行数据 df.loc[0] = ['BBitcoinBTC', '$16.678,36', '+0,32%']
内容的提问来源于stack exchange,提问作者Samuel Martins
相关产品推荐
相关产品推荐

