有一个名为topmentions
的 Dataframe ,下面是一些与之相关的数据:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 30 entries, 22 to 29
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 reference 30 non-null object
1 freq 30 non-null int64
dtypes: int64(1), object(1)
memory usage: 720.0+ bytes
None
reference freq
22 Giorgia Meloni|PER 4
16 Matteo Piantedosi|PER 3
10 Donald Trump|PER 3
28 Gianfranco Baruchello|PER 3
3 Tomaso Montanari|PER 3
尽管变量topmentions
是一个有效的 Dataframe ,尽管下面的代码按预期工作,但变量topmentions
被Pylint标记为Value 'topmentions' is unsubscriptable
。
下面是被标记的代码:
json_string = topmentions[
topmentions["freq"].cumsum() < topmentions["freq"].sum() / 2
].to_json(orient="records")
代码片段中的三个变量名都被标记为错误。
PS:我知道我可以通过添加# pylint: disable=unsubscriptable-object
来抑制这些错误,但是我不想采用这种技巧
1条答案
按热度按时间ujv3wf0j1#
您的代码没有问题,这似乎是Pylint正在进行的issue,它错误地认为您的 Dataframe "不支持项分配(即不定义setitem方法)"。
您可以使用Pandas loc属性,而不是禁用警告,无论如何,这可能是更可取的(请参见此处的 * 注意 * 和此post)。
因此,在下面这个(希望是)可重复的例子中(截至本答案发布之日,使用的是Python 3.10.9、Pandas 1.5.2、Pylint 2.15.9):
在脚本上运行Pylint会打印出:
现在,如果将
df[df["col1"] == "a"]
替换为df.loc[df.loc[:, "col1"] == "a", :]
并再次运行Pylint,一切都很好:同样:
加薪:
但是
df.loc[:, "col2"] = ["c", "d"]
没有。