【问题标题】:Rows from tsv file into separate arraystsv 文件中的行到单独的数组中
【发布时间】:2020-04-27 16:31:22
【问题描述】:

我有一些动作捕捉数据,因此特定值与特定标记有关。我想要做的是从这个 tsv 文件中只读取特定的行和列,并将这些值放入数组中。

我的数据 - t_0028.tsv 文件 - 如下所示:

考虑到标记对应的列(例如,ARIEL_01 X、ARIEL_01 Y、ARIEL_01 Z),我想要保留第 12 行以后的值。

所以期望的输出是: ARIEL_01_X = [##, ##, ## .. ] 其中 # 是值。

我开始这样做:

with open("t_0028.tsv") as fd:
    rd = csv.reader(fd, delimiter="\t")
    for row in rd:
        print(row[10:21])

但输出只是整个 tsv 文档。我还没有考虑如何将它们放入我想要的数组中,老实说我不知道​​该怎么做,或者即使有可能。

任何帮助都会很棒!

【问题讨论】:

  • 你能发布一个“t_0028.tsv”的样本吗?
  • 你能在你的 Python 环境中安装和使用 Pandas 吗?使用 Pandas 很容易得到你想要的。
  • @Jona 上图是t_0028.tsv的例子
  • @imran 是的,我可以使用 Pandas,我正在使用 Jupyter notebook

标签: python arrays csv


【解决方案1】:

假设您的输入是一个 tsv 文件,并且它通过 Excel 显示的图像就是您所显示的,您应该:

  • 跳过最初的 11 行
  • 只考虑相关的列

代码可以是:

ARIEL_01_X = []
ARIEL_01_Y = []
ARIEL_01_Z = []
with open("t_0028.tsv") as fd:
    rd = csv.reader(fd, delimiter="\t")
    for i in range(11): _ = next(rd)           # skip initial lines
    for row in rd:
        ARIEL_01_X.append(row[3])              # only keep the relevant columns
        ARIEL_01_Y.append(row[4])
        ARIEL_01_Z.append(row[5])

【讨论】:

  • 谢谢你。唯一的问题是现在数组看起来像这样ARIEL_01_X = ['-205.981', '-206.203', '-206.376',...] 有没有办法让每个值都没有''?
【解决方案2】:

使用 Pandas,这很简单,基本上就一行代码:

import pandas as pd
df = pd.read_csv("t_0028.tsv", sep="\t", skiprows=10)
df['ARIEL_01 X'] 
# or 
df['ARIEL_01 X'].tolist()

如果您只想保留数据框中的某些列,可以将usecols=['Frame','ARIEL_01 X','ARIEL_01 Y','ARIEL_01 Z'] 之类的东西传递给read_csv 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2014-09-19
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2014-09-16
    相关资源
    最近更新 更多