我試圖一次刪除多個列而不利用他們的字段信息。我每個月都會從縣裏得到一份CSV文件,而且我不想與大衆分享多個領域。直到現在,每個月我都會手動刪除每個字段。由於我正在嘗試學習python,我想了解如何創建一個腳本來完成它。我想刪除58個字段,所以我不想爲每個字段寫一個腳本,但希望創建一個刪除它們的範圍。我一直在這裏搜索論壇幾個小時,並嘗試了很多不同的方法,我不知道從哪裏開始或停止。任何幫助,將不勝感激。刪除多列
Q
刪除多列
3
A
回答
1
讓我們假設你有一個CSV文件是這樣的:
Name,Sex,Address,Age
John,M,New York,40
Mary,F,Los Angeles,30
,你想保持僅列Name
和Address
。
然後,你可以做這樣的事情(Python 3中),利用該DictWriter
類的extrasignore
參數:
import csv
fields = ["Name", "Address"]
with open("test.csv") as infile, open("out.csv", "w", newline="") as outfile:
# in Python 2, use open("out.csv", "wb") as outfile:
r = csv.DictReader(infile)
w = csv.DictWriter(outfile, fields, extrasaction="ignore")
w.writeheader()
for row in r:
w.writerow(row)
結果:
Name,Address
John,New York
Mary,Los Angeles
如果你想這樣做的其他方式,我。即指定列從文件中刪除,那麼它是一個比較複雜:
import csv
delete = ["Sex", "Age"]
with open("test.csv") as infile, open("out.csv", "w", newline="") as outfile:
# in Python 2, use open("out.csv", "wb") as outfile:
r = csv.DictReader(infile)
firstrow = next(r) # Need to read the first row so we know the fieldnames
fields = r.fieldnames
w = csv.DictWriter(outfile,
[field for field in fields if not field in delete],
extrasaction="ignore")
w.writeheader()
w.writerow(firstrow)
for row in r:
w.writerow(row)
6
我很懶,所以我喜歡時,我可以使用現有的庫,並已成爲傳道的話了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列保持到下至-last:
>>> df.ix[:,1:-1]
Sex Address
0 M New York
1 F Los Angeles
等等。
相關問題
- 1. QsortFilterProxyModel刪除多列
- 2. MySQL刪除多列
- 3. 從data.table刪除多個列
- 4. 刪除R中的多列
- 5. 刪除R中的多列
- 6. 問題,刪除時多列
- 7. 從R data.table刪除多個列與刪除列的參數
- 8. Phpexcel刪除一列或多列
- 9. 刪除多級(鏈刪除)
- 10. 刪除多個()
- 11. 刪除多表
- 12. 刪除多行
- 13. 刪除多行
- 14. 刪除多行
- 15. MySql多刪除
- 16. 如何從多個陣列中刪除?
- 17. 刪除行如果多列空
- 18. SQLITE3使用刪除多行「WHERE列IN(?)」
- 19. 刪除多列中的空值
- 20. 如何在postgresql中刪除多列
- 21. 同時刪除多個列表範圍?
- 22. 從多維數組刪除陣列
- 23. 從陣列中刪除多個對象
- 24. 熊貓 - 刪除多個空列
- 25. JTable使用多列鍵刪除行
- 26. C#列表中刪除多個項目
- 27. 在sql中刪除不同的多列
- 28. 通過連接多列刪除查詢
- 29. 從列表中刪除多個項目
- 30. 刪除python列表中的多個值
你有沒有試過這種 [刪除列 - 蟒蛇] [1] [1]:http://stackoverflow.com/questions/7588934/deleting-columns-in-a-csv-with-python – Verbatus 2013-04-08 19:45:11
我確實看過。我有超過100個我想保留的字段,所以我試圖不列出每個字段。除非我誤解了這篇文章的所有建議,否則這是我需要做的。我願意把它們全部列出來,但如果可能的話,寧願避免它。 – user2259051 2013-04-08 19:55:20