【问题标题】:Creating comma delimited array of floating point numbers and naming the array after first element (string) of the line in a CSV file创建逗号分隔的浮点数数组并在 CSV 文件中行的第一个元素(字符串)之后命名数组
【发布时间】:2016-05-21 10:10:51
【问题描述】:

我正在尝试从上面在 excel 中打开的 csv 文件中读取行,使用 python 在我的 python 脚本中使用。我想获取每一行并创建一个与该行相对应的数组,该数组由第一列中的元素命名,数组本身就是右边的元素。所以对于 csv 的第一行,我想创建一个数组

Line_1i = ([0.207161, 0.266311, 0.972088, 0.839942, 0.96135, 0.074271, 0.000249])

现在我尝试使用以下 Python 代码:

with open(filename) as f:
     reader = csv.reader(f)
         for row in reader:
              str(row[0]) = row[1:]

但这不起作用。最后一行的各种更改也没有起作用,我现在不确定如何通过行第一列中的相应名称来命名值数组。

在网上搜索时,我可以找到许多与我的问题非常接近的问题和解决方案,但没有一个会采用行的第一个元素并使用它来命名该行中的值数组。我觉得这可能是一个很常见的问题。

【问题讨论】:

  • 您遇到的错误是什么?你认为你在哪里创建数组?
  • 是的,这是一个常见的问题,标准的解决方案是使用字典。在 Python 中动态创建变量名可能,但真的不是一个好主意。您打算如何访问这些动态命名的列表?
  • @PM2Ring 我的脚本中有另一个函数,它接受两个数组(我认为是 numpy 数组)作为其参数。因此,我需要能够读取行,将它们保存在 python 脚本中,然后在调用后面的函数时按名称访问它们

标签: python arrays python-3.x csv file-io


【解决方案1】:

变量不是这样工作的,你不能给他们动态的名字。使用带有字符串键的字典:

result = {}

with ... for ...
    result[row[0]] = row[1:]

print(result['Line_1i'])  # prints [0.207161, 0.266311, ...]

【讨论】:

  • 好的,很好。在这种方法中,您将如何摆脱 csv 阅读器创建的 NaN?数组具有不同的大小/长度非常重要。
  • @Jurassic 如果你不使用熊猫,你不应该得到 NaN。无论如何,这听起来像是一个新问题,应该包含一些代码。
【解决方案2】:

除非您特别需要这种基于循环的解决方案,否则最简单的方法可能是:

import pandas as pd
result = pd.read_csv(filename, header = None)

这将为您将文件解析为类似格式的表格,其中缺少值的NaN(根据您的屏幕截图)。

【讨论】:

  • 不要指望一个不了解变量如何工作的初学者来使用数据帧。
  • 我自己实际上曾尝试使用数据帧,但我仍然需要将每一行作为一个数组作为参数传递给稍后在我的 python 脚本中的函数。我无法弄清楚如何以上述格式执行此操作
【解决方案3】:

你应该使用字典。东西:

your_dict= {}
with open(filename) as f:
    reader = csv.reader(f)
    for row in reader:
        your_dict[str(row[0])] = row[1:]

通常它应该可以工作!

【讨论】:

  • 不需要str
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 2022-01-17
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多