首页 > 解决方案 > 将列表转换为DataFrame如何删除第一行中的前导0

问题描述

我正在尝试使用 Panda 将 a 转换listDataFrame. 每次我试图将列表转换为 DataFrame 时,我都会得到第一行,0但它不能正常工作?

代码:

import pandas as pd

df = pd.DataFrame(list(data))
print(df)

输入:

['"DateTime","mm"', ['"2016-10-14 00:00:00"', '1.1'], ['"2016-10-15 00:00:00"', '2.1'], ['"2016-10-16 00:00:00"', '8.4'], ['"2016-10-17 00:00:00"', '1.1'], ['"2016-10-18 00:00:00"', '3.1'], ['"2016-10-19 00:00:00"', '0'], ['"2016-10-20 00:00:00"', '0'], ['"2016-10-21 00:00:00"', '0'], ['"2016-10-22 00:00:00"', '0'], ['"2016-10-23 00:00:00"', '0'], ['"2016-10-24 00:00:00"', '7.4'], ['"2016-10-25 00:00:00"', '2.1'], ['"2016-10-26 00:00:00"', '0'], ['"2016-10-27 00:00:00"', '0'], ['"2016-10-28 00:00:00"', '0'], ['"2016-10-29 00:00:00"', '0']

输出:

                                0
0                 "DateTime","mm"
1    ["2016-10-14 00:00:00", 1.1]
2    ["2016-10-15 00:00:00", 2.1]
3    ["2016-10-16 00:00:00", 8.4]
4    ["2016-10-17 00:00:00", 1.1]
..                            ...
344    ["2017-10-05 00:00:00", 1]
345    ["2017-10-06 00:00:00", 0]
346  ["2017-10-07 00:00:00", 1.1]
347    ["2017-10-08 00:00:00", 0]
348    ["2017-10-09 00:00:00", 0]

[349 rows x 1 columns]

标签: pythonpandaslistdataframe

解决方案


你想要的是这样的:

pd.DataFrame(data[1:], columns=data[0].split(','))

要获得具有datetimefloat类型的干净数据框:

df = (pd.DataFrame(data[1:], columns=data[0].replace('"', '').split(','))
        .assign(DateTime=lambda d: d['DateTime'].str.strip('"'))
        .astype({'DateTime': 'datetime64', 'mm': 'float'})
)

输出:

    DateTime   mm
0 2016-10-14  1.1
1 2016-10-15  2.1
2 2016-10-16  8.4
3 2016-10-17  1.1
4 2016-10-18  3.1
...

现在它已经干净并可以用于下游处理了。例子:

df.plot(x='DateTime', y='mm')

阴谋


推荐阅读