属性错误: 'numpy.ndarray' 对象没有 'drop' 属性。

11

我正在尝试删除Pandas数据框的前24行。

在网上搜索后,我相信使用Pandas的“drop”函数是实现这一目标的最佳方式。

但是,每当我尝试使用它时,都会出现错误:

AttributeError: 'numpy.ndarray' object has no attribute 'drop'

这是我创建Pandas数据框的方法:

import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
%matplotlib inline
import os
cwd = os.getcwd()

df = pd.read_csv('C:/Users/.../Datasets/Weather/temperature4.csv')

那么:

df.fillna(df.mean())
df.dropna()

我的数据框(df)的头部看起来像这样: enter image description here

接着:

df = StandardScaler().fit_transform(df)
df.drop(df.index[0, 23], inplace=True)

这是我遇到AttributeError的地方。

不确定应该如何删除数据框的前24行。

(这全部在我的本地机器上使用Python 3和Jupyter笔记本完成)


尝试使用 df = df.iloc[24:] - Arda Arslan
当我尝试这样做时,出现了AttributeError: 'numpy.ndarray' object has no attribute 'iloc'的错误。 - RockAndaHardPlace
1
fit_transaform() 返回一个numpy数组。你把它当作了一个dataframe。尝试使用 df = pd.DataFrame(StandardScaler().fit_transform(df)) - harvpan
1
一些注释:您的图像显示在读取csv时应该传递列名 - 看起来您的列名是从第一行数据中获取的。尝试在pd.read_csv中传递name参数。 此外,df.mean()返回一个系列,因此我认为df.fillna(df.mean())不会产生您期望的结果。而且,在执行df.fillna()之后进行df.dropna()有点危险 - 您不应该期望丢失行。最后,如果没有inplace=True,则不会使用这些命令实际更改df。 - lhay86
@Ihay86 非常有用的见解,我会仔细研究的,非常感谢! - RockAndaHardPlace
1个回答

18
问题出在以下这行代码:{{line}}。
df = StandardScaler().fit_transform(df) 

它返回一个numpy数组(请参见文档),该数组没有drop函数。您需要先将其转换为pd.DataFrame
new_df = pd.DataFrame(StandardScaler().fit_transform(df), columns=df.columns, index=df.index)

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