我试图对一个从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_registration
和visit_number_before_registration
列中的值...
2条答案
按热度按时间tvmytwxo1#
确保你没有 * 类似数字的列 *,并更改
iloc
中的索引:输出:
jhiyze9q2#
当我将整个 Dataframe 转换为对象
df = df.astype(object)
时,它就起作用了。如果有人能解释为什么。