0

Microsoft Excel にいくつかのデータがあり、使いやすいように CSV ファイルとして保存しています。データ構造は次のようになります。

MS Excel 形式:

L1                      
0   1   0   0   0   1   1
0   0   1   0   0   1   0
0   0   0   1   0   0   1
0   0   0   0   1   0   0
1   1   1   1   1   1   1
1   1   1   1   1   1   1
1   1   1   1   1   1   1
1   1   1   1   1   1   1

CSV形式

L1,,,,,,,,,,,,,,
0,1,0,0,0,1,1,
0,0,1,0,0,1,0,
0,0,0,1,0,0,1,
0,0,0,0,1,0,0,
1,1,1,1,1,1,1,
1,1,1,1,1,1,1,
1,1,1,1,1,1,1,
1,1,1,1,1,1,1,

ご覧のとおり、最初の列だけにラベルが付けられているので、CSV ファイル (または Excel ファイルの方が簡単です) を読み込んで各列を取得し、ビット操作操作を行いたいと考えています。どうすればこれを達成できますか?パンダについて何か読んだことがありますが、各列を取得するために役立つものは見つかりません

4

4 に答える 4

2

与えられた .csv ファイル temp.csv

L1x,,,,,,,
0,1,0,0,0,1,1,
0,0,1,0,0,1,0,
0,0,0,1,0,0,1,
0,0,0,0,1,0,0,
1,1,1,1,1,1,1,
1,1,1,1,1,1,1,
1,1,1,1,1,1,1,
1,1,1,1,1,1,1,

次のように読み込んでください。

import pandas
a = pandas.read_csv('temp.csv', names = ["c%d" % i for i in range(8)], skiprows = 1)
a

出力:

   c0  c1  c2  c3  c4  c5  c6  c7
0   0   1   0   0   0   1   1 NaN
1   0   0   1   0   0   1   0 NaN
2   0   0   0   1   0   0   1 NaN
3   0   0   0   0   1   0   0 NaN
4   1   1   1   1   1   1   1 NaN
5   1   1   1   1   1   1   1 NaN
6   1   1   1   1   1   1   1 NaN
7   1   1   1   1   1   1   1 NaN

最後の列の「NaN」は、厄介な末尾のコンマに由来します。範囲内の 8 は、列の数と一致する必要があります。a使用中の列にアクセスするには、

a.c3

また

a[c3]

どちらも結果として

0    0
1    0
2    1
3    0
4    1
5    1
6    1
7    1
Name: c3

パンダの優れた点は、2 つの列を XOR したい場合、非常に簡単にできることです。

a.c0^a.c2

出力

0    0
1    1
2    0
3    0
4    0
5    0
6    0
7    0
Name: c0
于 2013-11-06T17:16:53.783 に答える
1

私が持っていると仮定します:

ここに画像の説明を入力

次のような CSV ファイルに保存できます。

L1,,,
L2,0,10,20
L3,1,11,21
L4,2,12,22
L5,3,13,23
L6,4,14,24
L7,5,15,25
L8,6,16,26
L9,7,17,27
L10,8,18,28

任意の列を取得するには、CSV リーダーを使用して zip で転置します。

import csv

with open('test.csv', 'rU') as fin:
    reader=csv.reader(fin)
    data=list(reader)

print 'data:', data
# data: [['L1', '', '', ''], ['L2', '0', '10', '20'], ['L3', '1', '11', '21'], ['L4', '2', '12', '22'], ['L5', '3', '13', '23'], ['L6', '4', '14', '24'], ['L7', '5', '15', '25'], ['L8', '6', '16', '26'], ['L9', '7', '17', '27'], ['L10', '8', '18', '28']]

データが行のリストであることに注意してください。zip を使用してリストのリストを転置して、列のリストを取得できます。

trans=zip(*data)
print 'trans:',trans
# trans: [('L1', 'L2', 'L3', 'L4', 'L5', 'L6', 'L7', 'L8', 'L9', 'L10'), ('', '0', '1', '2', '3', '4', '5', '6', '7', '8'), ('', '10', '11', '12', '13', '14', '15', '16', '17', '18'), ('', '20', '21', '22', '23', '24', '25', '26', '27', '28')]

次に、インデックスを作成して特定の列を取得します。

print trans[0]
# ('L1', 'L2', 'L3', 'L4', 'L5', 'L6', 'L7', 'L8', 'L9', 'L10')

もちろん、セルで算術演算を行いたい場合は、文字列を必要に応じて int または float に変換する必要があります。

于 2013-11-06T16:29:12.713 に答える
0

サンプル コードは列を配列として返します。

input = """L1,,,,,,,,,,,,,,
0,1,0,0,0,1,1,
0,0,1,0,0,1,0,
0,0,0,1,0,0,1,
0,0,0,0,1,0,0,
1,1,1,1,1,1,1,
1,1,1,1,1,1,1,
1,1,1,1,1,1,1,
1,1,1,1,1,1,1,
"""

def getColumn(data,column_number):

    dump_array=[]
    lines=data.split("\n")
    for line in lines:
        tmp_cell = line.split(",")
        dump_array.append(tmp_cell[3])
    return dump_array

#for ex. get column 3
getColumn(3,input)

これは、グリッドを操作するアイデアを与えるかもしれません...

注: 現在、コードをテストするためのインタープリターを持っていないため、タイプミスがありましたら申し訳ありません...

于 2013-11-06T16:01:56.553 に答える