2017-03-07 27 views
1

私の質問はおそらくかなりシンプルですが、私はまだそれを手に入れることができませんでした。方法:PythonのCSVファイルで選択的に行と列を削除する

私は、特定の物理アプリケーションのcsvファイルを比較するプログラムに取り組んでいますが、これは問題ではありません。私が比較する必要があるファイルには、2つの列に数千の行の値を持つ2つの列がありますが、問題の原因となっている余分な行と列もその点の上にあります。

まず、ここに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']) 

私はあなたの助けを本当に感謝します。ソリューションが簡単になればなるほど、優れています。私の目標は、エネルギーとカウントの2つの列を取り、それから私のフルプログラムでその値を実行することです。

おかげで、 デビッド

+1

私は実際のコードにコードのあなたのイメージを変換し、あなたの答えにそれを編集しました。コードの画像を投稿しないでください。ここであなたの質問に答えることを止める最速の方法です。 –

答えて

3

あなたはこの種のものは、本当に簡単になりこれ、パンダを使用することができます。

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

あなたはさまざまな方法でデータフレームから、これらのアレイにアクセスすることができ、最も簡単には され、あなたがpandasデータフレームを持っています。これはnumpy配列の集合です。

また、numpyの使用できます。また、あなたのnumpyの配列のコレクションを提供します

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

を。読込み時に行をスキップする場合は、索引をリセットする必要はありません。
これはcsvを使用して行うことができますが、pandasと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後の最初の2列と行をしたいですか?

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の後に2つの列に接続されたすべての行をしたいが、私は自分自身でその部分を行うことができます。私はこれを試してみて、それがどのように動作するか見てみましょう! –

+0

私はおそらく愚かですが、私は "列に付いた行"が何を意味するのか分かりません。データの形状をもう少し正確に記述できますか? – Denziloe

+0

あなたのアイデアは私にこのエラーコードを与えています。このエラーコードはバイパスの方法が不明です。 PermissionError:[Errno 13]アクセス許可が拒否されました: '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) 
関連する問題