我试图在不使用字段信息的情况下一次删除多个列。我每个月都会从该县收到一份 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/