2016-10-25 15 views
1

ここにpythonが新しくなりました(しかしR、SQLの経験はあります)。 私はこれをグーグルで試してみましたが、新しいアイデアを生み出すことができませんでした。 私の主な目的は、私のcsvデータを使って行列を生成することですが、2列目を行列の行に入れ替えたいと思います。私はその行列に第3列のデータを入力したいのですが、どこにもいられませんでした。Pythonの行列:2列目を行列の行に置き換えて3列目にデータを入れよう

数日後、私はこのコードが出ているが:

import csv 
    def readcsv(csvfile_name): 
      with open(csvfile_name) as csvfile: 
      file=csv.reader(csvfile, delimiter=",") 
    #remove rubbish data in first few rows 
      skiprows = int(input('Number of rows to skip? ')) 
       for i in range(skiprows): 
        _ = next(file) 

    #change strings into integers/floats 
       for z in file: 
        z[:2]=map(int, z[:2]) 
        z[2:]=map(float, z[2:]) 
        print(z[:2]) 
      return 

これはちょうど私のデータをクリーンアップし、しかし、私がやりたいものをマトリックスにデータを転置することです。しかし、私はこのようなマトリックスに、このデータを有効にしたい

 1 1 x 
     1 2 y 
     1 3 z 
     1 4 d 
     . . . 
     . . . 

:つまり、私は思います私が持っているデータは、この(X、Y、Z、Dおよび他の文字山車ですが想像)のようなものですその行列に第3列のデータ(ここでは文字を読みやすくするための文字)を入力し、2列目を行列の行に変換します。したがって、本質的に、そのCSVファイルの第1列と第2列は行列の座標です。

  1 2 3 4 . . 
     1 x y z d 
     1 a b c u 
     1 e f e y 
     . 
     . 

私はnumpyを学習しようとしましたが、すでにデータが行列形式である必要があります。

+0

?また、結果は行列ではありません。最初の行は2番目の行より1少ないエントリしかないからです。正しい? – jme

+0

申し訳ありませんが、数字になっているはずです。あなたが読むのを簡単にするために手紙にしました。 CSVファイルは大量ですが、列と比較してヒープ行が増えますが、行列に変換した後、2列目を先頭行に置き換えて3列目のデータを入力すると正方行列になります。私の貧弱な説明については申し訳ありませんが、うまくいけば意味があります。 – dizzyLife

+0

待って、最初と2番目の列は、マトリックスの座標ですか?例えば、 '[1、1]'は '[0、0]'、 '' [1,2] ' - >' [0、1] '、' '[2、1] 、0] 'など?あなたは完全な配列がどのように見えるかの完全な例を私たちに教えてください。 (つまり、どの値が2番目と3番目の行に出力されましたか) – SCB

答えて

1

numpyを使用する場合は、データの格納方法に応じて2つのオプションがあります。

THIS NOT THIS 
------ -------- 
1 1 a 1 1 a 
1 2 b 1 3 b 
1 3 c 2 1 c 
1 4 d 3 1 d 
2 1 e 1 2 e 
2 2 f 1 4 f 
2 3 g 8 8 g 
2 4 h 2 2 h 

そして、単に右端の列のすべての値を取り、平らなnumpyの配列にそれらをチャックと再構築によると:あなたの鍵は、例えば、一貫して増加することが保証されている場合

  1. 左と中央の列の最大値。

    import numpy as np 
    m = np.array(right_column) 
    # For the sake of example: 
    #: array([1., 2., 3., 4., 5., 6., 7., 8.]) 
    m = m.reshape(max(left_column), max(middle_column)) 
    #: array([[1., 2., 3., 4.], 
    #:  [5., 6., 7., 8.]]) 
    
  2. ことが保証されていない場合、あなたはそれが(おそらく最も簡単な)になるように並べ替えるか、各要素を通して、正しい形状とサイクルのゼロの配列を作成することができますどちらか。 `A`、 'B'、 'C​​'、などから来るのか

    # Example data 
    left_column = [1, 2, 1, 2, 1, 2, 1, 2] 
    middle_column = [1, 1, 3, 3, 2, 2, 4, 4] 
    right_column = [1., 5., 3., 7., 2., 6., 4., 8.] 
    
    import numpy as np 
    m = np.zeros((max(left_column), max(middle_column)), dtype=np.float) 
    for x, y, z in zip(left_column, middle_column, right_column): 
        x -= 1 # Because the indicies are 1-based 
        y -= 1 # Need to be 0-based 
        m[x, y] = z 
    
    print(m) 
    #: array([[ 1., 2., 3., 4.], 
    #:  [ 5., 6., 7., 8.]]) 
    
+0

素晴らしいです!実際には500行以上のデータがあるので、右端の列(または任意の列)の「すべての値」を取り入れてください。 – dizzyLife

+0

私は、ある種の「for」関数でコードを組み込むことを考えていました。 3列目のコードを実行してコードを実行してくださいnumpyがそれを行うことができると思いますか? – dizzyLife

+0

@dizzyLife ['fromiter'](https://docs.scipy.org/doc/numpy/)参照/生成/ numpy.fromiter.html)、いくつかの[Python Generator](https://wiki.python.org/moin/Generators)を使用して、必要な番号を取得してください。 – SCB

関連する問題