【问题标题】:Read data from file in two separate arrays从两个单独的数组中的文件读取数据
【发布时间】:2021-04-23 22:43:42
【问题描述】:

我是 python 新手,正在尝试从文件加载数据。 我的文件如下所示:

TION 13168375
NTHE 11234972
THER 10218035
THAT 8980536
OFTH 8132597
FTHE 8100836
THES 7717675
WITH 7627991

我想将两列提取到单独的数组中。 到目前为止我尝试的是:

import numpy as np
s=open("Equadgrams.txt", "r")
data = np.genfromtxt(s, dtype=[('mystring','S4'),('myint','i8')])

在 loadtxt 命令的文档中,看起来我可以将结果拆分为单独的数组,但这给了我错误。

x,y = np.loadtxt(s, dtype=[('mystring','S4'),('myint','i8')])

Traceback (most recent call last):
File "<input>", line 3, in <module>
ValueError: too many values to unpack (expected 2)

我注意到的另一件事: 数据数组中的整数似乎没问题,但未按预期读取字符串。 我得到第一个条目: b'TION' 类型为 class

我希望有人能帮我解决我的问题。

【问题讨论】:

  • genfromtxt 中使用U4' instead of 'S4' (default unicode versus bytestring). data['mystring']` 和data['myint'] 应该会给你想要的数组。
  • loadtxt 应该像genfromtxt 一样提供一维、二字段数组。显然,您不能 unpack 在第一个大维度上将其分成 2 个变量。 loadtxt 有一个“解包”参数,但我不确定它是否适用于结构化 dtype(它只是“转置”输出)。

标签: python arrays numpy file


【解决方案1】:

如果你想要两个不同的数组,你可以使用以下:


s = open("filename.txt", "r")
lines = s.readlines()

strings = [line.split[' '][0] for line in lines]
ints = [line.split[' '][1] for line in lines]

s.close()

我希望这是你想要的正确格式。否则你必须在之后转换它。

【讨论】:

    【解决方案2】:

    也许您应该使用pandas,它是一个众所周知的python 库,可以像您拥有的那样处理表格数据。 所以首先使用pip安装pandas,如下:

    pip install pandas
    

    然后像这样加载你的文件:

    import pandas as pd
    df = pd.read_csv("Equadgrams.txt",sep=" ")
    

    【讨论】:

      【解决方案3】:

      您可以遍历文件中的每一行并使用 .split 方法将值附加到 x 和 y:

      x = []
      y = []
      file = open("file.txt","r")
      for line in file:
          x.append(line.split(" ")[0])
          y.append(line.split(" ")[1])
      

      【讨论】:

        猜你喜欢
        • 2016-01-06
        • 1970-01-01
        • 2020-12-07
        • 1970-01-01
        • 1970-01-01
        • 2022-10-07
        • 2014-11-07
        • 2019-02-09
        • 1970-01-01
        相关资源
        最近更新 更多