1. ホーム
  2. python

[解決済み] Python を使って csv ファイルをヘッダ付きでインポートする方法 (最初の列が非数値の場合)

2023-07-08 12:39:25

質問

これは以前の質問の詳細ですが、私がpythonを深く掘り下げるにつれて、pythonがcsvファイルをどのように扱うかについてますます混乱しています。

私はcsvファイルを持っていて、それはそのままでなければなりません(例えば、それをテキストファイルに変換することはできません)。 これは、5 行×11 列の配列または行列、またはベクトルに相当します。

私は、ここや他の場所で見つけたさまざまな方法を使用して csv を読み込もうとしました (例. python.org ) を使って、最初の行と最初の列 = 非数値である列と行の関係を維持するように試みました。 残りは浮動小数点数であり、正と負の浮動小数点数が混在しています。

私がしたいことは、csvをインポートし、それをpythonでコンパイルして、もし私が列のヘッダーを参照するなら、それは行に格納されているその関連する値を返すことでしょう。例えば

>>> workers, constant, age
>>> workers
    w0
    w1
    w2
    w3
    constant
    7.334
    5.235
    3.225
    0
    age
    -1.406
    -4.936
    -1.478
    0

などなど...

私はこの種のデータ構造を処理するためのテクニックを探しています。 私はpythonに非常に新しいです。

どのように解決するのですか?

Pythonのcsvモジュールはデータを行単位で扱うので、そのようなデータを見るのは通常の方法です。あなたは列単位のアプローチを望んでいるようです。ここにその方法の1つがあります。

あなたのファイルの名前が myclone.csv という名前のファイルで

workers,constant,age
w0,7.334,-1.406
w1,5.235,-4.936
w2,3.2225,-1.478
w3,0,0

このコードはあなたにアイデアを与えてくれるはずです。

>>> import csv
>>> f = open('myclone.csv', 'rb')
>>> reader = csv.reader(f)
>>> headers = next(reader, None)
>>> headers
['workers', 'constant', 'age']
>>> column = {}
>>> for h in headers:
...    column[h] = []
...
>>> column
{'workers': [], 'constant': [], 'age': []}
>>> for row in reader:
...   for h, v in zip(headers, row):
...     column[h].append(v)
...
>>> column
{'workers': ['w0', 'w1', 'w2', 'w3'], 'constant': ['7.334', '5.235', '3.2225', '0'], 'age': ['-1.406', '-4.936', '-1.478', '0']}
>>> column['workers']
['w0', 'w1', 'w2', 'w3']
>>> column['constant']
['7.334', '5.235', '3.2225', '0']
>>> column['age']
['-1.406', '-4.936', '-1.478', '0']
>>>

数値を浮動小数点にするためには、次のようにします。

converters = [str.strip] + [float] * (len(headers) - 1)

を前面に出して、次のようにします。

for h, v, conv in zip(headers, row, converters):
  column[h].append(conv(v))

のように、各行ごとに記述します。