【问题标题】:How to split big list item in different items如何将大列表项拆分为不同的项目
【发布时间】:2020-08-16 23:59:52
【问题描述】:

我有一个元素列表,但是这些元素应该通过 ,-delimiter 分隔成更多元素。

[[{'col1': '81627', 'picture_date': '2018-03-26'},
  {'col1': '82034', 'picture_date': '2018-03-28'},
  {'col1': '81625', 'picture_date': '2018-03-26'},
  {'col1': '81626', 'picture_date': '2018-03-26'}]]

这是一个列表项列表[1],但应分为 4 个列表项。有什么有效的方法来做到这一点?

【问题讨论】:

  • 你是在问如何把它变成这样的结构 [{}, {}, {}, {}]?
  • 是多个元素的列表,而不是这一大项目的列表
  • 想要的输出是什么?
  • 4 个项目 [{},{},{},{}] 的列表,因此我之后可以将其转换为 4 行和两列“col1”和“picture_date”的数据框'
  • pd.DataFrame([l for d in data for l in d]) 回答问题了吗?

标签: python list dataframe split delimiter


【解决方案1】:

我认为这对你有用

>>> import pandas as pd
>>> alist= [[{'col1': '81627', 'picture_date': '2018-03-26'},
...   {'col1': '82034', 'picture_date': '2018-03-28'},
...   {'col1': '81625', 'picture_date': '2018-03-26'},
...   {'col1': '81626', 'picture_date': '2018-03-26'}]]
>>> df = pd.DataFrame(alist[0])
>>> df
    col1 picture_date
0  81627   2018-03-26
1  82034   2018-03-28
2  81625   2018-03-26
3  81626   2018-03-26

【讨论】:

    【解决方案2】:

    你可以尝试扁平化列表:

    df = pd.DataFrame([l for d in data for l in d])
    

    输出

    #     col1 picture_date
    # 0  81627   2018-03-26
    # 1  82034   2018-03-28
    # 2  81625   2018-03-26
    # 3  81626   2018-03-26
    

    编辑

    为了能够对数据执行一些计算,您需要将列转换为相应的类型。你可以使用dtypes查看types

    print(df.dtypes)
    # col1            object
    # picture_date    object
    # dtype: object
    
    • 要将数据转换为数字,解决方案是使用pd.to_numeric
    • 要将数据转换为时间对象,解决方案是使用pd.to_datetime
    df["col1"] = pd.to_numeric(df["col1"])
    df["picture_date"] = pd.to_datetime(df["picture_date"])
    print(df.dtypes)
    # col1                     int64
    # picture_date    datetime64[ns]
    # dtype: object
    

    【讨论】:

    • 这是将其转换为 DataFrame 的一种非常有效的方法,但由于某种原因,我无法对列行进行任何计算
    • 这是因为列类型是字符串,请参阅更新以解决此问题。
    【解决方案3】:

    我建议使用列表推导式(对于我们这些还不了解 pandas 的人):

    your_list = [[
        {'col1': '81627', 'picture_date': '2018-03-26'},
        {'col1': '82034', 'picture_date': '2018-03-28'},
        {'col1': '81625', 'picture_date': '2018-03-26'},
        {'col1': '81626', 'picture_date': '2018-03-26'},
        ]]
    
    what_you_want = [item for sub_list in your_list for item in sub_list]
    print(what_you_want)
    

    输出:

    [{'col1': '81627', 'picture_date': '2018-03-26'}, {'col1': '82034', 'picture_date': '2018-03-28'}, {'col1': '81625', 'picture_date': '2018-03-26'}, {'col1': '81626', 'picture_date': '2018-03-26'}]
    

    【讨论】:

      猜你喜欢
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 2014-06-08
      相关资源
      最近更新 更多