8

ビットの文字列を含む1列を含むpandas Dataframeがあります。'100100101'. この文字列をnumpy配列に変換したい。

どうやってやるの?

編集:

使用する

features = df.bit.apply(lambda x: np.array(list(map(int,list(x)))))
#...
model.fit(features, lables)

でエラーが発生しますmodel.fit:

ValueError: setting an array element with a sequence.

マークされた回答のために私が思いついた私のケースで機能するソリューション:

for bitString in input_table['Bitstring'].values:
    bits = np.array(map(int, list(bitString)))
    featureList.append(bits)
features = np.array(featureList)
#....
model.fit(features, lables)
4

3 に答える 3

17

strings = "100100101"の場合、少なくとも 2 つの異なる方法でそれを numpy 配列に変換できます。

最初は numpy のfromstring方法を使用します。データ型を指定し、要素の「ベース」値を差し引く必要があるため、少し厄介です。

import numpy as np

s = "100100101"
a = np.fromstring(s,'u1') - ord('0')

print a  # [1 0 0 1 0 0 1 0 1]

where'u1'はデータ型で、ord('0')各要素から「ベース」値を減算するために使用されます。

2 番目の方法は、各文字列要素を整数に変換し (文字列は反復可能であるため)、そのリストを に渡しますnp.array

import numpy as np

s = "100100101"
b = np.array(map(int, s))

print b  # [1 0 0 1 0 0 1 0 1]

それで

# To see its a numpy array:
print type(a)  # <type 'numpy.ndarray'>
print a[0]     # 1
print a[1]     # 0
# ...

2 番目のアプローチは、入力文字列の長さが増加するにつれて、最初のアプローチよりも著しく悪化することに注意してくださいs。小さな文字列の場合は近いですがtimeit、90 文字の文字列の結果を考慮してください (私は を使用しましたs * 10):

fromstring: 49.283392424 s
map/array:   2.154540959 s

(これはデフォルトのtimeit.repeat引数を使用しています。最小 3 回の実行で、各実行は 1M の文字列から配列への変換を実行する時間を計算します)

于 2015-03-17T05:34:39.337 に答える
2

pandas メソッドの 1 つは、df 列で apply を呼び出して変換を実行することです。

In [84]:

df = pd.DataFrame({'bit':['100100101']})
t = df.bit.apply(lambda x: np.array(list(map(int,list(x)))))
t[0]
Out[84]:
array([1, 0, 0, 1, 0, 0, 1, 0, 1])
于 2015-03-17T09:18:39.150 に答える