UnboundLocalError: 本地变量 'df' 在赋值前被引用

-1 投票
1 回答
2641 浏览
提问于 2025-04-18 00:41

我想我已经把 df 定义成了 pandas.DataFrame()

为什么这段代码会出现 UnboundLocalError 错误呢?

import pandas as pd
import statsmodels.api as sm
import numpy as np
from math import log

def half_life(x):
    df = pd.DataFrame()
    df['Close'] = x
    df['ylag'] = df['Close'].shift(1)
    df['deltaY'] = df['Close'] - df['ylag']
    df = df[1:]
    A = np.vstack([df['ylag'], np.ones(len(df['ylag']))]).T
    results = sm.OLS(df['deltaY'], A).fit()
    halflife = -log(2)/results.params[0]
    return halflife

请帮帮我!

1 个回答

0

数据框(DataFrame)

数据框是一种二维的数据结构,里面的数据有标签,列的数据类型可以不同。你可以把它想象成一个电子表格或者SQL数据库中的表格,或者是一组Series对象的字典。数据框通常是pandas中最常用的对象。和Series一样,数据框可以接受很多不同类型的输入:

一维数组的字典、列表、字典或Series
二维的numpy.ndarray
结构化或记录型的ndarray
一个Series 另一个数据框

除了数据,你还可以选择性地传入索引(行标签)和列(列标签)的参数。如果你传入了索引和/或列,就能保证生成的数据框会有你指定的索引和/或列。因此,如果你有一个Series的字典和一个特定的索引,所有不匹配这个索引的数据都会被丢弃。

如果没有传入轴标签,系统会根据输入数据的常识规则自动生成这些标签。

注意,你在尝试调用数据框时没有传入任何参数。根据手册,你必须有一个数据结构,并且用特定类型的数据结构作为参数来调用DataFrame,才能得到特定类型的结果。查看我提到的手册中的例子,看看如何设置pd.DataFrame(d),并打印df.type()和df,看看你实际得到了什么。

撰写回答