python-3.x 如何解决此错误类型错误:在“ellipsis”和“int”的示例之间不支持“〈”[关闭]

jum4pzuy  于 2023-04-13  发布在  Python
关注(0)|答案(1)|浏览(191)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
昨天关门了。
Improve this question
我无法解决下面的问题,我有一个csv文件与用户ID,月份和花费的美元,一月,二月和三月,并希望预测在四月,五月和六月的美元支出。

q1_2023 = transactions[['userid', 'month', 'amount']]

pivot_table = pd.pivot_table(q1_2023, values='amount', index='userid', columns='month', aggfunc='sum')

print(pivot_table)

X_train = pivot_table.iloc[:, :-1]
y_train = pivot_table.iloc[:, -1]

model = LinearRegression()
model.fit(X_train, y_train)

user_ids = [1, 2, 3, ...]

X_test = pd.DataFrame({'userid':[1,2,3,...] , 'month': [4, 5, 6 ,...]})
X_test_pivot = pd.pivot_table(X_test, values='month', index='userid', columns='month', aggfunc=lambda x: 1)

predictions = model.predict(X_test_pivot)

q2_2023 = pd.DataFrame({'userid': [1,2,3,...], 'amount': predictions})
print(q2_2023)

我是python的新手,心里没有一个解决方案。

e5nqia27

e5nqia271#

不要使用ellipsis作为值,这不是它的正确用例。例如,这里有一个数组:

user_ids = [1, 2, 3, ...]

数组的前3个元素的类型是int,但最后一个元素的类型是class <ellipsis>,它不能访问与int相同的比较运算符,因此它失败并返回TypeError。
例如:

a = 1
b = ...
a > b

Out:
TypeError: '>' not supported between instances of 'int' and 'ellipsis'

与您使用的dataframe类似的情况:

X_test = pd.DataFrame({'userid':[1,2,3,...] , 'month': [4, 5, 6 ,...]})

你到底想用省略号做什么?
这不是ellipsis的正确用例。您可以正确使用它的一些情况是:

  • 跳过函数或方法的实现细节:
from typing import Protocol

class Foo(Protocol):

    def my_method(self) -> str:
        ...

在这种情况下,使用pass会导致linter出错,因为pass意味着没有返回值,而我们应该返回一个字符串。省略号不会导致这个问题。

  • 当创建专门用于元组的类型提示以避免列出每个值的类型时:
a: tuple[int] = (1, 2, 3)   # This is incorrect and linter will complain
a: tuple[int, int, int] = (1, 2, 3)   # this works but cumbersome when many values
a: tuple[int, ...] = (1, 2, 3)  # this is also correct as long as all values of the same type

相关问题