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

如何为多个加密货币DataFrame应用函数并生成2021年数据的新DataFrame?

问题原因分析

你的代码存在两个核心问题:

  1. 循环变量赋值无法保留批量结果:循环里的dataframe = date_func(dataframe)只是把处理后的DataFrame临时赋值给循环变量,每次循环都会覆盖这个变量,最终仅保留最后一个DataFrame(即xrp)的处理结果,前面的所有结果都会丢失。
  2. 缺少原始DataFrame与名称的映射:你只把DataFrame对象存入列表,没有关联它们的名称(比如bitcoin、aave),自然无法自动生成bitcoin21、aave21这类对应命名的变量。
解决方案

方法1:用字典存储处理结果(推荐,避免污染全局命名空间)

先将原始DataFrame和对应名称配对成字典,遍历处理后把结果存入新字典,后续通过字典键调用即可:

import pandas as pd

# 用字典存储原始DataFrame,键为名称字符串,值为对应DataFrame
df_dict = {
    'bitcoin': bitcoin,
    'have': have,
    'binance': binance,
    'Cardano': Cardano,
    'chainlink': chainlink,
    'cosmos': cosmos,
    'crypto_com': crypto_com,  # 原名称含空格,建议改为下划线命名避免语法问题
    'dogecoin': dogecoin,
    'eos': eos,
    'Ethereum': Ethereum,
    'iota': iota,
    'litecoin': litecoin,
    'monero': monero,
    'nem': nem,
    'Polkadot': Polkadot,
    'Solana': Solana,
    'stellar': stellar,
    'tether': tether,
    'uni_swap': uni_swap,  # 空格替换为下划线
    'usdcoin': usdcoin,
    'wrapped': wrapped,
    'xrp': xrp
}

def date_func(df):
    # 复制原DataFrame,避免修改原始数据
    df_copy = df.copy()
    df_copy['Date'] = pd.to_datetime(df_copy['Date'])
    df_copy = df_copy.set_index('Date').sort_index()
    df_copy = df_copy['2021-01-01':]
    return df_copy

# 批量处理并生成带21后缀的结果字典
df_21_dict = {}
for name, df in df_dict.items():
    new_name = name + '21'
    df_21_dict[new_name] = date_func(df)

# 调用示例:df_21_dict['bitcoin21']、df_21_dict['uni_swap21']

方法2:直接生成全局变量(不推荐,易引发命名混乱)

如果一定要生成bitcoin21这类独立变量,可以用globals()将结果注入全局命名空间:

import pandas as pd

# 定义名称与DataFrame的配对列表
df_name_pairs = [
    ('bitcoin', bitcoin),
    ('have', have),
    ('binance', binance),
    # 其他DataFrame与名称的配对...
    ('xrp', xrp)
]

def date_func(df):
    df_copy = df.copy()
    df_copy['Date'] = pd.to_datetime(df_copy['Date'])
    df_copy = df_copy.set_index('Date').sort_index()
    df_copy = df_copy['2021-01-01':]
    return df_copy

# 批量生成带21后缀的全局变量
for name, df in df_name_pairs:
    new_name = name.replace(' ', '_') + '21'
    globals()[new_name] = date_func(df)

# 直接调用示例:bitcoin21、uni_swap21
额外优化建议
  • 原始DataFrame名称中的空格(如crypto com)不符合Python变量命名规范,建议提前将原始DataFrame重命名为crypto_com这类格式,避免后续操作出错。
  • 在date_func中使用df.copy()复制原数据,防止误修改原始DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:45:36