【问题标题】:selecting one specific column out of a text file从文本文件中选择一个特定的列
【发布时间】:2023-02-20 20:23:04
【问题描述】:
我只想选择以下文本文件的第二列:500、1000、1500、...、4500、5000、5500、...、21000
我在下面附上了我的文本文件的图片。
我已经使用下面的脚本来做到这一点,但我的结果中没有数字 500:
with open("example", "r") as f:
reader = csv.reader(f, delimiter =" ")
second_column = list(zip(*reader))[3]
有人可以帮我解决这个问题吗?
【问题讨论】:
标签:
python
csv
matplotlib
【解决方案1】:
您可以使用 pandas 库中的 read_csv 函数。例如:
import pandas as pd
data = pd.read_csv("data.csv", delimiter=",")
选择右边的delimiter。你会得到一个pandasDataFrame。然后您可以使用例如列标题来选择您感兴趣的列:
my_column = data["my_column"]
如果您更喜欢使用 numpy,可以使用 to_numpy() 方法将 my_column 系列转换为 numpy 数组。
【解决方案2】:
第二列 - 索引=1。在您的代码中,索引为 3。必须为 1。
with open("example", "r") as f:
reader = csv.reader(f, delimiter =" ")
second_column = list(zip(*reader))[1]
【解决方案3】:
您显示的示例不是 csv 文件。从以空格分隔的数据的角度来看,第一个单元格位于第 4 个位置,而不是第 3 个。
作为解决方法,我们可以尝试pandas.read_csv(your_data, sep='s+', engine='python')。但首先我会尝试一些更基本的东西——读取、过滤、拆分和获取索引 1 处的数据:
with open("example", "r") as f:
data = [int(line.split()[1]) for line in f if not line.startswith('#')]
请注意,str.split 将默认使用空格作为分隔符,并从结果中删除任何空字符串,这类似于 pandas csv-reader 中的sep='s+'。
在更一般的情况下,一些 line.strip(). ... 可能也是合适的。