【问题标题】:How do 'numpy.ndarray' object do not 'numpy.ndarray' object?'numpy.ndarray' 对象如何不是 'numpy.ndarray' 对象?
【发布时间】:2019-10-29 06:04:50
【问题描述】:

当您调用 DataFrame.to_numpy() 时,pandas 会找到可以容纳 DataFrame 中所有 dtype 的 NumPy dtype。但是如何进行反向操作呢?

我有一个“numpy.ndarray”对象“pred”。它看起来像这样:

[[0.00599913 0.00506044 0.00508315 ... 0.00540191 0.00542058 0.00542058]]

我正在尝试这样做:

 pred = np.uint8(pred)
 print("Model predict:\n", pred.T)

但我明白了:

[[0 0 0 ... 0 0 0]]

为什么,转换后,我没有得到这样的东西:

0 0 0 0 0 0 ... 0 0 0 0 0 0

以及如何将 pred 写入文件?

pred.to_csv('pred.csv', header=None, index=False)
pred = pd.read_csv('pred.csv', sep=',', header=None)

给出错误信息:

AttributeError                            Traceback (most recent call last)
<ipython-input-68-b223b39b5db1> in <module>()
----> 1 pred.to_csv('pred.csv', header=None, index=False)
      2 pred = pd.read_csv('pred.csv', sep=',', header=None)
AttributeError: 'numpy.ndarray' object has no attribute 'to_csv'

请帮我解决这个问题。

【问题讨论】:

  • np.uint8之前尝试pred = list(pred.ravel())
  • to_csv 是一种熊猫数据框方法。你的predndarray

标签: python pandas numpy export-to-csv numpy-ndarray


【解决方案1】:

您可以通过一行代码将ndarray转换为pandas df然后转换为csv文件。

pd.DataFrame(X_train_res).to_csv("x_train_smote_oversample.csv")

【讨论】:

    【解决方案2】:

    pred 是一个ndarray。它没有to_csv 方法。这是 pandas DataFrame 拥有的东西。

    但是让我们看看第一件事。

    复制你的数组显示,添加逗号,让我列个清单:

    In [1]: alist = [[0.00599913, 0.00506044, 0.00508315, 0.00540191, 0.00542058, 0.
       ...: 00542058]]                                                              
    In [2]: alist                                                                   
    Out[2]: [[0.00599913, 0.00506044, 0.00508315, 0.00540191, 0.00542058, 0.00542058]]
    

    并从中创建一个数组:

    In [3]: arr = np.array(alist) 
    In [8]: print(arr)                                                              
    [[0.00599913 0.00506044 0.00508315 0.00540191 0.00542058 0.00542058]]
    

    ipython 默认显示的repr

    In [4]: arr                                                                     
    Out[4]: 
    array([[0.00599913, 0.00506044, 0.00508315, 0.00540191, 0.00542058,
            0.00542058]])
    

    由于双括号,这是一个二维数组。它的转置将具有形状 (6,1)。

    In [5]: arr.shape                                                               
    Out[5]: (1, 6)
    

    转换为uint8 可以正常工作(我更喜欢astype 版本)。但是

    In [6]: np.uint8(arr)                                                           
    Out[6]: array([[0, 0, 0, 0, 0, 0]], dtype=uint8)
    In [7]: arr.astype('uint8')                                                     
    Out[7]: array([[0, 0, 0, 0, 0, 0]], dtype=uint8)
    

    转换后的形状和之前一样 (1,6)。

    转换几乎没有意义。这些值在 1 和 0 之间都很小。转换为小的(1 字节)无符号整数可以预测会产生全 0。

    【讨论】:

    • 但最重要的是去掉双括号,制作uint8数组。有接近 1 和 0 的值,目标是将数组简化为 0 1 0 1 1 0 ...
    • 双括号只是底层数组结构的表面显示——它的尺寸和形状。 reshaperavel 可以将 2d 更改为 1d,但这并不能消除显示中的 []。而要将数组写入 csv 文件,您需要一个二维数组来表示行和列。
    • 使用 uint8(或任何 int dtype)不会舍入浮点数 - 它会截断它们。
    【解决方案3】:
    import numpy as np
    import pandas as pd
    
    x  = [1,2,3,4,5,6,7]
    x = np.array(x)
    y = pd.Series(x)
    print(y)
    y.to_csv('a.csv')
    

    【讨论】:

      猜你喜欢
      • 2019-04-07
      • 2019-09-04
      • 2021-06-11
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      相关资源
      最近更新 更多