gpt4 book ai didi

python - 为什么我创建的函数出现 TypeError : f() takes 0 positional arguments but 1 was given

转载 作者:行者123 更新时间:2023-11-28 22:33:56 28 4
gpt4 key购买 nike

我正在使用 pandas DataFrames,我正在添加新列以进行更高级的分析。我的 f 函数给我一个错误 TypeError: f() takes 0 positional arguments but 1 was given.我不明白为什么,如果您需要知道它的作用,我会在代码中记录我的 f 函数。

from pandas_datareader import data as dreader
import pandas as pd
from datetime import datetime
import dateutil.parser



# Sets the max rows that can be displayed
# when the program is executed
pd.options.display.max_rows = 200



# df is the name of the dataframe, it is
# reading the csv file containing date loaded
# from yahoo finance(Date,Open,High,Low,Close
# volume,adj close,)the name of the ticker
# is placed before _data.csv i.e. the ticker aapl
# would have a csv file named aapl_data.csv.
df = pd.read_csv("cde_data.csv")



# the following code will allow for filtering of the datafram
# based on the year, day of week (dow), and month. It then gets
# applied to the dataframe and then can be used to sort data i.e
# print(df[(df.year == 2015) & (df.month == 5) & (df.dow == 4)])
# which will give you all the days in the month of May(df.month == 5),
# that fall on a Thursday(df.dow == 4), in the year 2015
# (df.year == 2015)
#
# Month Day Year
# January = 1 Monday = 1 The year will be dispaly in a four
# February = 2 Tuesday = 2 digit format i.e. 2015
# March = 3 Wednesday = 3
# April = 4 Thursday = 4
# May = 5 Friday = 5
# June = 6
# July = 7
# August = 8
# September = 9
# October = 10
# November = 11
# December = 12

def year(x):
return(x.year)
def dow(x):
return(x.isoweekday())
def month(x):
return(x.month)

# f is a function that checks to see if the up_down column
# has a value that is greater than, less than, or equal to
# zero. The value in the up_down column is derived from
# subtracting the opening price of the stock(open column)
# from closing price of the stock(close column). If up_down
# has a negative value than the stocks price was Down, a positive
# value then Up, and no change is Flat
def f():
if up_down > 0:
x = Up
elif up_down < 0:
x = Down
else:
x = Flat
return (f)


df.reset_index()

df.Date = df.Date.apply(dateutil.parser.parse)
df['year'] = df.Date.apply(year)
df['dow'] = df.Date.apply(dow)
df['month'] = df.Date.apply(month)
df['up_down'] = df['Close'] - df['Open']
df['up_down_flat'] = df.up_down.apply(f)


df2= (df[(df.year > 1984) & (df.month == 5) & (df.dow == 1)])
print (df2)

这是错误

Traceback (most recent call last):
File "dframt1est.py", line 77, in <module>
df['up_down_flat'] = df.up_down.apply(f)
File "C:\Users\Zac\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pandas\core\series.py", line 2220, in apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
File "pandas\src\inference.pyx", line 1088, in pandas.lib.map_infer (pandas\lib.c:63043)
TypeError: f() takes 0 positional arguments but 1 was given
Press any key to continue . . .

这是一个示例 csv

      Date       Open       High     Low   Close    Volume   Adj Close  \
0 1990-04-12 26.875000 26.875000 26.625 26.625 6100 250.576036
1 1990-04-16 26.500000 26.750000 26.375 26.750 500 251.752449
2 1990-04-17 26.750000 26.875000 26.750 26.875 2300 252.928863
3 1990-04-18 26.875000 26.875000 26.500 26.625 3500 250.576036
4 1990-04-19 26.500000 26.750000 26.500 26.750 700 251.752449
5 1990-04-20 26.750000 26.875000 26.750 26.875 2100 252.928863
6 1990-04-23 26.875000 26.875000 26.750 26.875 700 252.928863
7 1990-04-24 27.000000 27.000000 26.000 26.000 2400 244.693970
8 1990-04-25 25.250000 25.250000 24.875 25.125 9300 236.459076

最佳答案

您正在将 f 作为 apply 中的函数传递。为数据框中的每一行调用该函数,并且需要将该行作为其参数。

另请注意,您返回的是函数本身作为结果;我很确定您打算返回 x 而不是 f。此外,您似乎没有在任何地方定义 UpDownFlat

关于python - 为什么我创建的函数出现 TypeError : f() takes 0 positional arguments but 1 was given,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39430440/

28 4 0
文章推荐: python - 使用整数键更新字典
文章推荐: python - 用于从 Google 云存储呈现静态图像的 Django 设置
文章推荐: python - 沿任意轴相乘?
文章推荐: python - 无法选择值 - 错误 "Select only works on