.txtファイルから大量のデータを読み取ってプロットする一般的なプログラムを書いています。各ファイルには、異なる数の列があります。各ファイルには興味のない8つの列があることを知っているので、その方法で関連する列の数を把握できます。データを読み取り、関連する各列のデータを個別の変数に並べ替えるにはどうすればよいですか?
これは私がこれまでに持っているものです:
datafile = 'plotspecies.txt'
with open(datafile) as file:
reader = csv.reader(file, delimiter=' ', skipinitialspace=True)
first_row = next(reader)
num_cols = len(first_row)
rows = csv.reader(file, delimiter = ' ', quotechar = '"')
data = [data for data in rows]
num_species = num_cols - 8
pandasはこの種のことには良いと言われていますが、インポートできないようです。それがないソリューションがいいと思います。
パンダは実際、ここでの正しい解決策です。問題は、基礎となる構造がわからないものを堅牢に処理するために、注意しなければならないエッジケースがたくさんあり、それをcsv
モジュールにシューホーンしようとすることです。頭痛のレシピ(それは可能ですが)
pandas
をインポートできない理由は、デフォルトでpython
が付属していないためです。言語を選択する際に考慮すべき最も重要なことの1つは、言語がアクセスできるパッケージのエコシステムです。 Pythonはたまたまこの点で最高の1つなので、標準の一部ではないものをすべて無視するpythonは言語の最高の部分を無視することです。
Windows環境を使用している場合は、まずconda
を設定する必要があります。これにより、pythonユーザーが利用できるパッケージの多くを、オーバーヘッドをほとんどかけずにシームレスに探索できます。これには、実際にはこの問題を処理する正しい方法であるpandas
が含まれます。を参照してください。 condaのインストールの詳細については、次のリンクを参照してください: http://conda.pydata.org/docs/install/quick.html
pandas
をインストールすると、次のように簡単になります。
import pandas
test = pandas.read_csv(<your_file>)
your_Variable = test[<column_header>]
そのように簡単です。
コアにないものを本当に本当に使いたくない場合python次のようなものでこれを行うことができますが、実際の詳細については十分に説明していません解決:
def col_var(input_file, delimiter):
# get each line into a variable
rows = open(input_file).read().splitlines()
# split each row into entries
split_rows = [row.split(delimiter) for row in rows]
# Re-orient your list
columns = Zip(*split_rows)
これの最も直感的でない部分は最後の行なので、これがどのように機能するかを示す小さな例です。
>>> test = [[1,2], [3,4]]
>>> Zip(*test)
[(1, 3), (2, 4)]
さて、列を設定する行内にある種の区切り文字があれば、csvモジュールを使用できます。
import csv
file_to_read_from = 'myFile.txt'
#initializing as many lists as the columns you want (not all)
col1, col2, col3 = [], [], []
with open(file_to_read_from, 'r') as file_in:
reader = csv.reader(file_in, delimiter=';') #might as well be ',', '\t' etc
for row in reader:
col1.append(row[0]) # assuming col 1 in the file is one of the 3 you want
col2.append(row[3]) # assuming col 4 in the file is one of the 3 you want
col3.append(row[5]) # assuming col 6 in the file is one of the 3 you want