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

如何通过索引修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:35:27