在 Python 中导入和格式化 CSV 以进行绘图

Importing and formatting a CSV in Python for plotting

我是 Python 的新手,但了解我需要帮助的内容。

我正在尝试导入如下所示的 csv 文件:

Title of Project
name1, Info 1
name2, Info 2
name3, Info 3
name4, Info 4
name5, Info 5
a,b,c,d,e,f,g,h,i,j,k,l,m
a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1
...
...
an,bn,cn,dn,en,fn,gn,hn,in,jn,jn,kn,ln,mn

所有的逗号实际上都是用'\t'分隔的,我不知道怎么处理?

所以总的来说,我想删除标题和接下来的 5 行,只处理文件中第 7 行到第 n 行的数据以进行绘图。

包含 'a,b,c,d,etc' 的行需要是 headers 并且它下面的数据应该相应地分成列。

我需要语法方面的帮助并了解最有效的方法。非常感谢任何帮助或指导!

谢谢。

您可以使用 Python 的 built-in CSV 模块来处理此问题。

我的示例使用 tab-delimiter 读取示例数据,丢弃前 6 行,并保存其余行以写入新的 comma-delimited 文件。

您首先需要打开文件进行读取并创建一个 CSV reader 对象:

import csv

with open('input.csv', newline='') as f:
    reader = csv.reader(f, delimiter='\t')
    ...

您可以通过几种不同的方式遍历 reader 的

在您的情况下,要跳过多行,请按顺序多次调用 next(reader),忽略其中的数据 returns:

    ...
    for i in range(1, 7):
        next(reader)  # manually advance reader / discard rows
    ...

您还可以使用标准 for-loop 迭代 reader 的行。我正在创建 all_rows 列表来保存您真正关心的行:

    ...
    all_rows = []
    for row in reader:
        all_rows.append(row)
    ...

对于标准的reader对象,headers没有什么特别的,是否存在完全取决于你有任何特殊价值...对于 reader,它只是像其他行一样的行:

print(all_rows)
[
 ['a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h ', 'i' , 'j' , 'k' , 'l' , 'm'],
 ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1', 'i1', 'j1', 'k1', 'l1', 'm1'],
 ['an', 'bn', 'cn', 'dn', 'en', 'fn', 'gn', 'hn', 'in', 'jn', 'kn', 'ln', 'mn']
]

现在,您可以使用 all_rows 做任何您需要的事情,将其提供给绘图仪,或将其保存为 cleaned-up CSV:

with open('output.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(all_rows)

这是 CSV module 的官方文档。这是一个很好的参考,可以提醒您它是如何工作的,一旦您掌握了它,但我认为对正在发生的事情有一个基本的了解并不是很好。

我已经编写了自己的 how-to CSV w/Python 指南。我花了更多时间来了解更基本的事情,但这是我在 SO 上看到人们被绊倒的简单事情。