2017-06-28 10 views
0

私はデータフレームを持っています。列の1つu4がリストです。以下のような何か:データフレームのリストに番号を追加

enter image description here

リストのリスト内の数字は文字列型です。どのようにしてリストに数字を追加できますか?

0 60 
1 0 
2 87.98 
. 
. 
. 

私は、ループを使用してみました:

lists=[] 
for row in activity_u_variables.u4: 
    total=0 
    for i in row: 
     total+=i 
    lists.append(total) 

それは私にはTypeErrorエラーメッセージました: 'int型' と 'str' は

:+ =のためにサポートされていないオペランドのタイプ(複数可)

アイデア?

+0

'=合計0 'あなたはとしてそれを宣言している' int'まだ追加 '合計+ =あなたが言ったように – void

+0

は、' '値を合計+ =フロート(i)をしてみてくださいi'文字列'でそれをi'文字列です。フロートに変換 – nikpod

+1

イメージの代わりにファイルをコピーしてコピーしてください。サンプルをatleast! – void

答えて

1

DataFrameにはリストの一部ではない0が存在します。したがって、for i in row:は失敗します。リストの形式でない唯一の数字が0の場合は、[0]

また、iは前述のとおりです。 +操作を実行するには、明示的にfloatに変換する必要があります。

このように、あなたのコードは、に修正されなければならない。そうでない場合は、それが可能だ場合は合計値を返す関数、または元の値を定義することができ

lists=[] 
for row in activity_u_variables.u4: 
    total=0 
    if row == 0: 
     row = [0] 
    for i in row: 
     total+=float(i) 
    lists.append(total) 
+1

ありがとうございます@nikpod。今それは動作します。私は問題は '0'がリストの一部ではないからだと思う。 –

0

def my_sum(x): 
    try: 
     return sum(x) 
    except TypeError: 
     return x 

、その後、列にこの機能を適用

sums = df['u4'].apply(my_sum) 

列はリストの文字列表現であれば、あなたは、私はちょうど別のものを考え出し、この

def my_sum(x): 
    import ast 

    if isinstance(x, str): 
     x = ast.literal_eval(x) 
    try: 
     return sum(x) 
    except TypeError: 
     return x 
0

ような何かを行う可能性があります方法。私はあなたの参照のためにここに投稿します。この機能は、複数の列に対してこの処理を行う必要がある場合に便利です。

# create a list_sum function 

def list_sum(s): 
    return sum([float(i) for i in `s.split('|')]) 

# apply the function 
activity_u_variables.u4.astype(str).apply(lambda x: list_sum(x)) 
関連する問題