csv - 删除多列

标签 csv multiple-columns

我试图在不使用字段信息的情况下一次删除多个列。我每个月都会从该县收到一份 CSV 文件,其中有多个字段我不想与公众共享。到目前为止,每个月我都会手动删除每个字段。因为我正在尝试学习 python,所以我想学习如何创建一个脚本来完成它。我想删除 58 个字段,所以我不想为每个字段编写脚本,但希望创建一个范围来删除它们。我在这里的论坛上搜索了几个小时,尝试了很多不同的方法,我不知道从哪里开始或停止。任何帮助将不胜感激。

最佳答案

我很懒惰,所以我喜欢尽可能使用现有的库,并且已成为 pandas 的传道者图书馆。使用@Tim Pietzcker 的示例:

Name,Sex,Address,Age
John,M,New York,40
Mary,F,Los Angeles,30

我们可以只保留我们想要使用的列:

import pandas as pd
df = pd.read_csv("to_remove.csv")
keep_cols = ["Name", "Address"]
new_df = df[keep_cols]
new_df.to_csv("removed.csv", index=False)

(我们也可以单行,但我认为这样更清楚。)


解释如下。首先,我们可以将文件读入一个名为 DataFrame 的存储对象:

>>> import pandas as pd
>>> df = pd.read_csv("to_remove.csv")
>>> df
   Name Sex      Address  Age
0  John   M     New York   40
1  Mary   F  Los Angeles   30

我们可以从此对象中选择一列或多列:

>>> df[["Name", "Sex"]]
   Name Sex
0  John   M
1  Mary   F

然后写出来:

>>> new_df = df[["Name", "Sex"]]
>>> new_df.to_csv("removed.csv", index=False)

(index=False 位只是告诉它不要添加计算行数的列,即上面的数字 0、1),生成

Name,Sex
John,M
Mary,F

我们也可以决定只保留以字母“A”开头的列:

>>> [col for col in df.columns if col.startswith("A")]
['Address', 'Age']
>>> df[[col for col in df.columns if col.startswith("A")]]
       Address  Age
0     New York   40
1  Los Angeles   30

或使用 .ix 方法只保留从 #1 到倒数第二个的列:

>>> df.ix[:,1:-1]
  Sex      Address
0   M     New York
1   F  Los Angeles

等等。

关于csv - 删除多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15887372/

相关文章:

Python解析CSV忽略带双引号的逗号

sql - 如何将自定义枚举类型的数据从 csv 插入到现有的 PostgreSQL 表中

python - 无法将输出写入 csv bs4 python

java - 线程中的异常 "main"java.lang.NumberFormatException : For input string: "1"

html - 如何在同一行上获得 3 列?

SQL选择第一列来匹配单行中许多列的条件

MySQL 将 csv 字段映射到数据表中的特定字段

html - 一列中的 div 对齐,但立即将另一列向下移动

html - 如何在当前编码中添加第三列?

python - 如何在Python中使用Openpyxl对多行Excel行进行平均?