如何:从Python

时间:2017-03-07 16:30:52

标签: python python-3.x csv row multiple-columns

我的问题可能相当简单,但我还没能做到。

我正在开发一个比较特定物理应用程序的csv文件的程序,但这不是问题。我需要比较的文件有两列,这两列有几千行值,但是,在该点之上还存在导致问题的无关行和列。

首先,这是CSV文件,您显然可以看到我需要替换的额外行和列值。 CSV File

实际上,我只需删除前24行。

完成后,我想将所有值向上移动,以便第25行成为第1行,同时将所有后续行向上移动。

我遇到这个问题的全部原因是我可以使用以下代码去除CSV数据并对其进行复杂的计算:

import csv
with open('Unknown69-Spectra-Bloom_.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(row['Energy'], row['Counts'])

我真的很感谢你的帮助。解决方案越简单越好。我的目标是获取两列,能量和计数,然后在我的完整程序中运行它们的值。

谢谢, 大卫

3 个答案:

答案 0 :(得分:3)

你可以使用pandas,这使得这类事情变得非常简单:

import pandas
df = pandas.read_csv('file.csv', skiprows=24, header=None, names=[
    'Energy', 'Counts'])
print(df2['Energy'])
print(df2['Counts'])

您可以通过各种方式从数据框访问这些数组,最简单的方法 然后你有一个pandas数据帧,它是numpy数组的集合。

你也可以使用numpy:

import numpy as np
df = np.genfromtxt('file.csv', skip_header=24, delimiter=',')

这也将为您提供numpy数组的集合。如果您在读入时间跳过行,则无需重置索引 使用csv可以做到这一点,但是pandas和numpy非常有用,所以如果你愿意给他们一个机会,他们就可以很好地进行数据处理。

文档:

熊猫:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

numpy的:https://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html

答案 1 :(得分:1)

所以你只想要24之后的前两列和第二行?

import csv

in_file = open("whatever.csv", "r")
out_file = open("whatever_transformed.csv", "w", newline="")

in_csv = csv.reader(in_file)
out_csv = csv.writer(out_file)

for row_number, row in enumerate(in_csv):
    if row_number >= 24:
        out_csv.writerow(row[:2])

in_file.close()
out_file.close()

答案 2 :(得分:1)

最简单的方法是在创建DictReader之前跳过不需要的行:

with open('Unknown69-Spectra-Bloom_.csv', newline='') as csvfile:
    nskiplines = 24
    for _ in range(nskiplines):
        next(csvfile)
    reader = csv.DictReader(csvfile)