pandas “IntegerArray”对象没有属性“reshape”

velaa5lx  于 2023-05-21  发布在  其他
关注(0)|答案(2)|浏览(139)

我试图对一个从SQL查询中得到的小 Dataframe 运行线性回归。
当运行下面的示例(使用虚拟数据集)时,一切都运行得很好:

# initialize list of lists
data = [['tom', 10, 20], ['nick', 15, 40], ['juli', 14, 70]]
  
# Create the pandas DataFrame
df = pd.DataFrame(data, columns=['Name', 'Age', 'value'])
  
# print dataframe.
df

X = df.iloc[:, 1].values.reshape(-1, 1) # values converts it into a numpy array
Y = df.iloc[:, 2].values.reshape(-1, 1)

linear_regressor = LinearRegression()  # create object for the class
linear_regressor.fit(X, Y)  # perform linear regression
Y_pred = linear_regressor.predict(X)  # make predictions

plt.scatter(X, Y)
plt.plot(X, Y_pred, color='red')
plt.show()

这是我正在处理的数据:

segment      ahid  pageviews_before_registration  visit_number_before_registration
0       long tail  45883641                             72                                21
1       long tail  49232488                             83                                15
2        unfunded  50757270                             46                                 6
3        unfunded  53214754                             30                                 9
4        unfunded  48812290                            248                                41
...           ...       ...                            ...                               ...
437456   unfunded  53253195                             25                                 5
437457  long tail  52374558                             25                                 6
437458   unfunded  53426345                             25                                 6
437459  long tail  50966914                             25                                 8
437460   unfunded  47672416                             25                                 6

这是我运行的查询来获取它:

query = """
    ...some sql...
"""
query_job = client.query(
    query,
    location="US",
) 

df = query_job.to_dataframe()
print(df)

当运行X = df.iloc[:, 2].values.reshape(-1, 1)时,我有以下错误AttributeError: 'IntegerArray' object has no attribute 'reshape'为什么?我的数据框与我以前共享的虚拟数据框有何不同

edit1

print(df.dtypes)
[437461 rows x 4 columns]
segment                             object
ahid                                object
pageviews_before_registration        Int64
visit_number_before_registration     Int64
dtype: object

edit2

当运行df.iloc[:, 2]df.iloc[:, 3]时,似乎我有正确的值,即pageviews_before_registrationvisit_number_before_registration列中的值...

tvmytwxo

tvmytwxo1#

确保你没有 * 类似数字的列 *,并更改iloc中的索引:

X = df.iloc[:, 2].values.reshape(-1, 1) # instead of `.iloc[:, 1]`
Y = df.iloc[:, 3].values.reshape(-1, 1) # instead of `.iloc[:, 2]`

输出:

jhiyze9q

jhiyze9q2#

当我将整个 Dataframe 转换为对象df = df.astype(object)时,它就起作用了。如果有人能解释为什么。

相关问题