2016-06-15 12 views
1

私は非常にPythonに新しいです。以前の質問を検索するこの問題の答えを見つけることができませんでした。Python Pandas; "Excelの"列操作を

プロジェクトでは、たくさんの.txtファイルを分析し、常に同じ計算を実行する必要があります。データフレームを作成するために、パンダが使用されました。うまく動作します。

他の列で計算が行われている余分な列が必要なので、たとえばc = a + bです。単純な計算のために これはうまく動作します:より「複雑」な計算を使用している場合

In [41]: import pandas as pd 
In [42]: import numpy as np 

In [43]: df = pd.DataFrame(np.random.randn(10,2),columns=list('ab')) 

In [44]: df 
Out[45]: 
     a   b 
0 0.163138 -1.261099 
1 0.094772 -0.553349 
2 -1.677519 -0.966680 
3 1.732083 -1.118715 
4 0.172240 -0.404648 
5 0.270712 0.089841 
6 0.589787 1.569790 
7 0.822016 0.857993 
8 -0.269941 0.586059 
9 -0.152639 0.240438 

In [46]: df["c"] = df["a"] + df["b"] 

In [47]: df 
Out[48]: 
     a   b   c 
0 0.163138 -1.261099 -1.097961 
1 0.094772 -0.553349 -0.458577 
2 -1.677519 -0.966680 -2.644198 
3 1.732083 -1.118715 0.613368 
4 0.172240 -0.404648 -0.232407 
5 0.270712 0.089841 0.360554 
6 0.589787 1.569790 2.159576 
7 0.822016 0.857993 1.680010 
8 -0.269941 0.586059 0.316118 
9 -0.152639 0.240438 0.087800 

問題が発生したことが起こった:

# C1 and C2 are some constants needed for the calculations 

In [49]: C1 = 1.5 

In [50]: C2 = 2.5 

In [51]: df["c"] = df["a"] + [(C1 * df["a"]) + (C2 * df["b"] ** 2)] 

Exception: Data must be 1-dimensional 

は、この問題に対する回避策はありますか?それとも私はこれを完全に間違って扱っていますか

答えて

1

まずエラーは、あなたがこのエラーを修正、削除、角括弧で内側の計算結果をラップしているということです。

In [157]: 

df["c"] = df["a"] + (C1 * df["a"]) + (C2 * df["b"] ** 2) 
df 
Out[157]: 
      a   b   c 
0 0.163138 -1.261099 4.383772 
1 0.094772 -0.553349 1.002418 
2 -1.677519 -0.966680 -1.857622 
3 1.732083 -1.118715 7.459016 
4 0.172240 -0.404648 0.839950 
5 0.270712 0.089841 0.696959 
6 0.589787 1.569790 7.635069 
7 0.822016 0.857993 3.895420 
8 -0.269941 0.586059 0.183810 
9 -0.152639 0.240438 -0.237071 

問題は内側の計算がシリーズを含むリストを生成することである。

In [159]: 
[(C1 * df["a"]) + (C2 * df["b"] ** 2)] 
​ 
Out[159]: 
[0 4.220634 
1 0.907646 
2 -0.180103 
3 5.726933 
4 0.667710 
5 0.426247 
6 7.045282 
7 3.073404 
8 0.453751 
9 -0.084432 
dtype: float64] 

あなたは、他の列/シリーズを追加し、それはブラケットがうまく働いた削除、

+0

感謝を整列させる方法を理解していないしてみてください!実際、df ["b"] ** 2の結果に定数C2を掛けたかったので、その部分はすでにOKでした。 –

+0

OKはわからない、最後の部分を削除する – EdChum

関連する問題