【问题标题】:Appending a list to a numpy array将列表附加到 numpy 数组
【发布时间】:2021-02-21 03:01:35
【问题描述】:

我有一个(可能)非常愚蠢的问题。我正在尝试使用 numpy 使用 csv 文件中的数据创建一个数组。我想让 csv 文件中的每一行和每一列都是 numpy 数组中的唯一行和列。为此,我使用 CSV 模块读取数据,并尝试使用 for 循环将其附加到我的 numpy 数组中。我无法让它工作。 (csv文件使用字符串)

import csv
import numpy as np

f = open('data.csv')
csv_file = csv.reader(f)

arr = np.zeros((121, 30))
rotations = 0
x = 0

for row in csv_file:
    arr[x] = row
    x += 1

f.close()

上面是不起作用的代码。 (注意,我尝试过使用各种初始化模型的方法,例如 numpy.full ,但仍然没有用)

【问题讨论】:

  • 你试过np.append吗?
  • 将行追加到列表中。这更容易,更快捷。然后从列表列表中创建数组。
  • @Theodor,不推荐np.append
  • 你得到什么错误? 不起作用是描述问题的不恰当方式。
  • 你得到什么错误? 不起作用是描述问题的不恰当方式。

标签: python arrays numpy csv


【解决方案1】:

你可以试试np.append:

import csv
import numpy as np

f = open('data.csv')
csv_file = csv.reader(f)

arr = np.zeros((121, 30))
rotations = 0
x = 0

for row in csv_file:
   arr = np.append(arr,row)


f.close()

【讨论】:

    【解决方案2】:

    您似乎已经知道需要多少行和列,因此您只需将行的内容切片到数组中。

    让我们使用上下文管理器和enumerate() 来为您的代码增添趣味!

    with open('data.csv', 'r') as f:
        csv_file = csv.reader(f)
    
        for i, row in enumerate(csv_file):
            arr[i,:] = row[:]
        
    

    【讨论】:

      【解决方案3】:

      只要 csv 文件的每一行都有 30 个元素(这是您指定为 NumPy 数组的维度),您的代码就应该可以工作,即使这些行的值是字符串。另一方面,您可以使用 Pandas 更简单地读取 csv 数据,它在后台使用 NumPy 数组。例如,

      import pandas as pd
      
      df = pd.read_csv("data.csv")
      arr = df.to_numpy() # This turns a Pandas dataframe to a NumPy array.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-24
        • 1970-01-01
        • 2022-10-15
        • 1970-01-01
        • 1970-01-01
        • 2020-01-10
        • 2020-09-05
        • 2017-05-22
        相关资源
        最近更新 更多