【问题标题】:How To: Delete Rows and Columns Selectively in a CSV file from Python [duplicate]如何:从 Python 中选择性地删除 CSV 文件中的行和列 [重复]
【发布时间】:2017-07-27 23:08:21
【问题描述】:

我的问题可能相当简单,但我还没有搞定。

我正在开发一个程序,用于比较某个物理应用程序的 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'])

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

谢谢, 大卫

【问题讨论】:

  • 我将您的代码图像转换为实际代码并将其编辑为您的答案。不要发布代码的图像。这是阻止人们在这里回答您的问题的最快方法。

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


【解决方案1】:

你可以使用 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

【讨论】:

  • 好的,谢谢!我对 python 还很陌生,所以我以前从未听说过 pandas 或 numpy。谢谢。
【解决方案2】:

所以你只想要 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()

【讨论】:

  • 好的,谢谢,我实际上希望所有行都附加到第 24 行之后的两列,但我可以自己完成这部分。让我试试看,看看效果如何!
  • 我可能很愚蠢,但我不确定“附加到列的行”是什么意思。你能更准确地描述一下数据的形状吗?
  • 所以你的想法是给我这个我不确定如何绕过的错误代码。 PermissionError:[Errno 13] 权限被拒绝:'Unknown69-Spectra-Bloom_.csv'
  • 您可能在 Excel 中打开了该文件。 ;)
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多