2016-12-06 10 views
5

に数学をやろうとしたときに、私は次のようになり、データフレームを持って に直列に変換することはできません: Pythonの例外TypeError:データフレーム

defaultdict(<class 'list'>, {'XYF':    TimeUS   GyrX   GyrY   GyrZ   AccX \ 
0  207146570 0.000832914 0.001351716 -0.0004189798 -0.651183 
1  207186671 0.001962787 0.001242457 -0.0001859666 -0.6423497 
2  207226791 9.520243E-05 0.001076498 -0.0005664826 -0.6360412 
3  207246474 0.0001093059 0.001616917 0.0003615251 -0.6342875 
4  207286244 0.001412051 0.0007565815 -0.0003780428 -0.637755 


[103556 rows x 12 columns], 'DAR':   TimeUS RSSI RemRSSI TxBuf Noise RemNoise RxErrors Fixed 
0  208046965 159  161 79 25  29  0  0 
1  208047074 159  161 79 25  29  0  0 
2  208927455 159  159 91 28  28  0  0 
3  208927557 159  159 91 28  28  0  0 


[4136 rows x 8 columns], 'NK2':   TimeUS IVN IVE IVD IPN IPE IPD IMX IMY IMZ IYAW \ 
0  207147350 -0.02 0.02 0.00 -0.02 0.01 0.20 0 0 0 1.94 
1  207187259 -0.02 0.02 0.00 -0.02 0.01 0.20 0 0 0 1.94 
2  207227559 -0.02 0.02 0.00 -0.02 0.01 0.14 0 0 0 1.77 
3  207308304 0.02 0.02 0.00 -0.01 0.01 -0.05 0 0 0 1.77 
4  207347766 0.02 0.02 0.00 -0.01 0.01 -0.05 0 0 0 0.82 

私が最初に私が数学をしたい列を分離

new_time = dfs['XYF']['TimeUS'] 

次に、いくつか数学を試してみましたが、私は運がありませんでした。 まずはリストのように扱いました。そう

動作しませんでした
new_time_F = new_time/1000000 

は、私のフロートエラーました:

TypeError: unsupported operand type(s) for /: 'str' and 'int' 

をので、私はこれをしなかった:これは私にエラーを与える

new_time_F = float (new_time)/1000000 

TypeError: cannot convert the series to <class 'float'> 

ここからどこに行くのかわかりません。

+0

リストはありますか?キーとしてのdfsの値と名前としてのdfsの使用これはそれが表示しているものであり、dfではありません。 – EdChum

+0

@EdChumはい、申し訳ありませんが、dfとdfsの間に大きな違いがあるかどうかはわかりませんでした。 –

答えて

7

を何(以前に提案されたように)、あなたはこれを行う場合:

new_time = dfs['XYF']['TimeUS'].astype(float) 
new_time_F = new_time/1000000 
+0

はい、 'XYF']。astype(float)?なぜ私は全体をフロートに変換できないのですか? TypeError:/: 'str'と 'int'のサポートされていないオペランドタイプ –

+1

実際には、データフレームに 'astype'を適用することはできません。代わりに 'applymap'を使用してください。例えば'dfs ['XYF'] = dfs ['XYF']。applymap(float)' – AlexG

+0

ああ!適用されたapplymap!これはastypeがリストでしか動作しないためですか?またはapplymapはデータフレーム内の文字列をどのように無視しますか? –

0

あなたの最初のデータに文字列と数字が含まれていないようです。おそらくデータが既に必要なタイプのものであることを確認することが最善の方法です。

しかし、あなたはこのように数値に文字列を変換することができます

pd.Series(['123', '42']).astype(float) 

代わりのfloat(series)

+0

それは動作しませんでした。私はこれを試みました:pd.Series(new_time_F).astype(浮動小数点数)しかしエラーが発生しましたTypeError:系列をに変換できません> –