将带有列表对象的数据框列转换为浮点数

时间:2019-05-06 08:47:06

标签: python python-3.x pandas dataframe type-conversion

我正在尝试将JSON文件转换为数据框。我创建的数据框有两列:timesumOfFFT。它们都是浮点数。 sumOfFFT的类型为float,而time的类型为object,列中的每一行都是一个list,其中包含数字。

我尝试使用to_numeric,并且所有数字都转换为NaN,因为它是list对象。我也尝试过Series,但是也一样。我正在尝试将每一行中的列表对象转换为字符串,然后浮动,但会引发错误。

a = float(str(frame.iloc[1]['time']))
print(a)
ValueError                                Traceback (most recent call last)
<ipython-input-75-2f41310a23f7> in <module>()
----> 1 a = float(str(frame.iloc[1]['time']))
      2 print(a)

ValueError: could not convert string to float: '[0.0001041666667]'

数据格式:

{
    "fft": {
        "time": [
            [0],
            [0.0001041666667],
            [0.0002083333333],
            [0.0003125],
                        ],
        "sumOfFFT": [2.883648107,2.769599456,2.659837554,2.560352381]
                }
}

到目前为止的代码:

import json
import pandas as pd
with open('akhil_195682_170628-174745.json') as json_data:
   obj = json.load(json_data)
   frame = pd.DataFrame(obj['fft'], columns=['time', 'sumOfFFT'])

输出:

time    sumOfFFT
0   [0] 2.883648
1   [0.0001041666667]   2.769599
2   [0.0002083333333]   2.659838
3   [0.0003125] 2.560352

我希望将数据转换为DataFrame,并相互绘制两个变量。

1 个答案:

答案 0 :(得分:0)

您可以这样做:

frame["time"]=frame["time"].apply(lambda x:x[0])

结果:

    sumOfFFT    time
0   2.883648    0.000000
1   2.769599    0.000104
2   2.659838    0.000208
3   2.560352    0.000313