我的问题可能相当简单,但我还没能做到。
我正在开发一个比较特定物理应用程序的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'])
我真的很感谢你的帮助。解决方案越简单越好。我的目标是获取两列,能量和计数,然后在我的完整程序中运行它们的值。
谢谢, 大卫
答案 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)