【问题标题】:Need help to convert pandas dataframe(iloc) to numpy array?需要帮助将 pandas 数据帧(iloc)转换为 numpy 数组吗?
【发布时间】:2019-07-01 14:54:34
【问题描述】:

我正在尝试编写具有多个变量的线性回归代码。我正在从 txt 文件中检索数据到“数据”变量。我正在尝试将前两列初始化为工作正常的变量 x。在尝试将 np.ones 数组添加到此二维数组的下一步中,我得到无法识别的数据。我在添加“np.ones”数组之前和之后添加了数组 x 的代码和值。谁能告诉我我做错了什么?谢谢。 我的代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('ex1data2.txt',header = None)
x = data.iloc[:,0:2]
y = data.iloc[:,2]
m=len(x)

y = y[:,np.newaxis]
x = (x - np.mean(x))/np.std(x)
ones = np.ones((m,1))

x = np.hstack((ones,x))

步骤 np.hstack() 之前 x 的值

           0         1
0   0.131415 -0.226093
1  -0.509641 -0.226093
2   0.507909 -0.226093
3  -0.743677 -1.554392
4   1.271071  1.102205
5  -0.019945  1.102205

步骤 np.hstack() 之后的值

[[ 1.00000000e+00  1.31415422e-01 -2.26093368e-01]
 [ 1.00000000e+00 -5.09640698e-01 -2.26093368e-01]
 [ 1.00000000e+00  5.07908699e-01 -2.26093368e-01]
 [ 1.00000000e+00 -7.43677059e-01 -1.55439190e+00]
 [ 1.00000000e+00  1.27107075e+00  1.10220517e+00]
 [ 1.00000000e+00 -1.99450507e-02  1.10220517e+00]]

【问题讨论】:

  • ones 的 int 数组被强制浮动。你的问题到底是什么?
  • 在我看来,你可能对 numpy 的“科学记数法”感到困惑,0.131415 变成了 1.31415422e-01,其中 e-01 表示 10**-1
  • 我不明白一个的值如何变成浮点数,而其他行在小数点后变得如此之大。因此,我在计算梯度下降时遇到了错误。
  • 你的意思是,你不知道scientific notation 是什么?这是非常基本的东西,停止梯度下降并阅读该链接。请注意,这些值完全相同,只是在打印时以不同的格式表示。

标签: python arrays pandas numpy


【解决方案1】:

我认为它正在做你想要的。这只是符号 1.31415422e-01 = 1.31415422 * 10^(-1) = 0.131415

基于问题的标题。如果您想继续使用 pandas DataFrame 而不是接收 numpy 数组,我建议您使用而不是

x = np.hstack((ones,x))

你使用

x = x.assign(ones = 1)

这会将 x 保留为 DataFrame,其中包含一个只有 1 的新列,称为“ones”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2021-04-04
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    相关资源
    最近更新 更多