Pandas 属性错误: Nonetype对象没有rename属性。

3

我从教程中学到了这个,但代码在我的电脑上无法运行。在 df.rename 这一行出现了错误。

def compile_data():
colist = pd.read_csv("nse500symbolistnov2020.csv")
tickers = colist['Symbol']

maindf = pd.DataFrame()

for count,ticker in enumerate(tickers):
    df = pd.read_csv('stock_dfs/{}.csv'.format(ticker))
    df = df.set_index('Date',inplace=True)
    df = df.rename(columns={'Adj Close': ticker},inplace=True)
    df.drop(['Open','High','Low','CLose','Volume'],1,inplace=True)

    if maindf.empty:
        maindf = df
    else:
        maindf = maindf.join(df, how='outer')

    if count % 10 == 0:
        print(count)

print(maindf.head())
maindf.to_csv('NSE60joined.csv')

1
什么错误? - Hugo
1
尝试从具有.rename的那行中删除inplace=True。 - FilipA
如果您的问题已得到解答,您应该接受最佳答案以关闭问题。 - Ivan Gorin
2个回答

4
问题出现在这一行。
df = df.set_index('Date',inplace=True)

要么删除 inplace=True,要么删除赋值 df=,只留下如下代码:

df.set_index('Date',inplace=True)

下一行代码同理。要么使用inplace=True,要么将新的数据框分配给df,但不能同时使用两者。

1
这是因为使用 inplace 会改变内存中的对象,但返回值为 None,而不使用 inplace,同样的更改会应用于输入对象,但更改后的对象会被返回。 - teepee
非常感谢。通过从set索引中删除inplace,问题已得到解决。 - samar2170

0
当您指定inplace=True并想要查看其内容时,它将返回None,因为它们仅仅改变了DF而不是创建一个新的副本。基本上,您将None分配给结果,因此它会抱怨AttributeError,因为它不再是df.DataFrame对象,无法访问其.head()方法。
现在有两种方法可以做到这一点: 不使用inplace参数进行赋值
df.rename(columns={'Adj Close': ticker},inplace=True)

没有使用inplace参数的赋值

df= df.rename(columns={'Y':l}) 

 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接