2017-03-07 15 views
1

我的問題可能相當簡單,但我還沒有弄清楚。如何:從Python中選擇性地刪除行和列中的一個CSV文件

我正在爲比較特定物理應用程序的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']) 

我會很感激你的幫助。解決方案越簡單越好。我的目標是把兩個專欄,精力和計數,然後在我的完整程序中運行他們的價值觀。

謝謝, 大衛

+1

我轉換了您的代碼圖像實際代碼和編輯它到你的答案。不要發佈代碼圖片。這是將人們從這裏回答問題的最快方法。 –

回答

3

你可以使用大熊貓,這讓這樣的事情真的很簡單:

import pandas 
df = pandas.read_csv('file.csv', skiprows=24, header=None, names=[ 
    'Energy', 'Counts']) 
print(df2['Energy']) 
print(df2['Counts']) 

可以以各種方式從數據幀訪問這些陣列,最簡單的是 然後你有一個熊貓數據框,這是一個numpy數組的集合。

您還可以使用numpy的:

import numpy as np 
df = np.genfromtxt('file.csv', skip_header=24, delimiter=',') 

這也將讓你numpy的陣列的集合。如果您在讀入時跳過行,則不需要重置索引。
使用csv可以做到這一點,但熊貓和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

+0

好的,謝謝!我對python相當陌生,所以我從來沒有聽說過熊貓或numpy。謝謝。 –

0

所以,你只需要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() 
+0

好的,謝謝,我真的希望所有的行都在第24行後面的兩列上,但我可以自己做那部分。讓我試試看看它是如何工作的! –

+0

我可能很愚蠢,但我不確定附加到列的「行」是什麼意思。你能更精確地描述數據的形狀嗎? – Denziloe

+0

所以你的想法給了我這個錯誤代碼,我不確定如何繞過。 PermissionError:[Errno 13] Permission denied:'Unknown69-Spectra-Bloom_.csv' –

1

最簡單的將是創建DictReader之前不需要的行跳過:

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