UnboundLocalError: 本地变量 'df' 在赋值前被引用
我想我已经把 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
数据框是一种二维的数据结构,里面的数据有标签,列的数据类型可以不同。你可以把它想象成一个电子表格或者SQL数据库中的表格,或者是一组Series对象的字典。数据框通常是pandas中最常用的对象。和Series一样,数据框可以接受很多不同类型的输入:
一维数组的字典、列表、字典或Series
二维的numpy.ndarray
结构化或记录型的ndarray
一个Series 另一个数据框除了数据,你还可以选择性地传入索引(行标签)和列(列标签)的参数。如果你传入了索引和/或列,就能保证生成的数据框会有你指定的索引和/或列。因此,如果你有一个Series的字典和一个特定的索引,所有不匹配这个索引的数据都会被丢弃。
如果没有传入轴标签,系统会根据输入数据的常识规则自动生成这些标签。
注意,你在尝试调用数据框时没有传入任何参数。根据手册,你必须有一个数据结构,并且用特定类型的数据结构作为参数来调用DataFrame,才能得到特定类型的结果。查看我提到的手册中的例子,看看如何设置pd.DataFrame(d),并打印df.type()和df,看看你实际得到了什么。