【问题标题】:Python CSV Row removal dependent on row numberPython CSV 行删除取决于行号
【发布时间】:2016-04-18 14:45:10
【问题描述】:

我有一个 python 系统,它从单独的 csv 文件加载问题和答案,用于使用 tkinter 的基于测验的程序。我可以加载文件、显示它们、允许用户添加更多问题等等。

我一直在寻找一种方法来使用 python 删除依赖于 questionNo(我的行计数器)的行。系统的工作原理是他们使用下一个和上一个按钮导航到问题,然后在他们不喜欢的问题上按删除。所以我可以访问 questionNo(我要删除的行的索引),但不知道如何使用 python 删除它。

任何帮助将不胜感激。我已经包含了我的代码,但其中很多都是与我的程序相关的(A 级课程),这只是其中的一小部分。 我不想使用其他 CSV 文件作为临时文件。

【问题讨论】:

  • 如果您不想使用另一个临时文件,您将不得不存储所有行,从列表中删除您想要的任何内容,然后覆盖原始文件

标签: python csv indexing delete-row


【解决方案1】:

如果您使用 pandas 的软件包,您可以将 csv 文件拖到 RAM 中,然后随意使用,然后保存并擦除之前的文件。它对于处理 csv 非常强大,并且不使用任何临时 csv。 打开文件并将它们加载到数据框中:

import pandas as pd
questions = pd.read_csv('questions.csv')
answers = pd.read_csv('answers.csv')

您可以通过以下方式为这些 Dataframe 添加索引:

questions = pd.read_csv('questions.csv', columns = my_columns, index = my_index)

然后擦除一行:

questions = questions.drop(number_of_your_question)
answers = answers.drop(number_of_your_answer)

并保存文件:

questions.to_csv
answers.to_csv

【讨论】:

  • 似乎无法让 pip 安装它,不断给我错误。如果我可以让它工作,我会尽快更新你,因为这是我正在寻找的解决方案。
  • 搞定了,但我不明白如何分配索引以及索引应该是什么,以便以后可以使用变量删除一行。
  • 您将使用水平索引。这是您使用“index = my_index”选项设置的内容。默认情况下,数据框的索引看起来像一个列表,基本上包含行号。然后通过键入 questions = questions.drop(number_of_your_question,您通过“忘记”行 [i] 重新创建数据框,其中 i 是您的问题的编号。请注意,索引不会更改,因此如果您删除第 4 行问题,新的第 4 个问题仍然有 5 个索引,因为它是第 5 个问题。为避免这种情况,您必须输入:df.reset_index().drop('index',1)
猜你喜欢
  • 2017-02-13
  • 2015-11-16
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
  • 2021-11-11
  • 1970-01-01
相关资源
最近更新 更多