【问题标题】:Pandas - How do I subset a column composed of list objects?Pandas - 如何对由列表对象组成的列进行子集化?
【发布时间】:2015-05-16 02:33:49
【问题描述】:

我正在使用从 Github 中提取的 JSON 文件:

curl https://api.github.com/repos/mbostock/d3/stats/commit_activity > d3_commit-activity.json

然后,我在 Pandas 中运行了以下命令:

import pandas as pd
import numpy as np
import matplotlib.pylab as plt

df = pd.io.json.read_json("d3_commit-activity.json")

df 中的一列称为“天”,其值是格式如下的列表:

[0,0,0,1,0,1,0]
[0,0,0,0,0,1,1]
[3,0,0,0,0,0,0]

换句话说,每个列表正好由七个数字组成。我想在这些列表中的每个元素中创建七个新列,但我对类似问题的解释完全困惑。我尝试按照 Bradley 解决此问题的方法 (pandas: How do I split text in a column into multiple rows?),但被告知“名称‘系列’未定义”。尝试更改为“pd.Series”,这似乎适用于该命令,但在后面的命令中失败。

肯定有一种简单、直接的方法来获取这些列表并将它们分成单独的列吗?

【问题讨论】:

    标签: python json pandas dataframe


    【解决方案1】:

    让我们定义一个day_names的列表:

    import pandas as pd    
    day_names = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
    

    那么其中任何一个都会达到预期的效果:

    df[day_names] = df.days.apply(lambda x: pd.Series(x))
    

    或者,

    df[day_names] = df.apply(lambda row: pd.Series(row.days), axis=1)
    

    【讨论】:

      【解决方案2】:

      从列表中创建列的简单方法如下:

      df2 = pd.DataFrame(zip(*df.days)).T
      df2.columns = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
      >>> df2
         Sun  Mon  Tue  Wed  Thu  Fri  Sat
      0    0    0    0    1    0    1    0
      1    0    0    0    0    0    1    1
      2    3    0    0    0    0    0    0
      

      使用星号可以在几天内解包参数,将它们放在单独的列中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-08
        • 2017-04-02
        • 2018-03-10
        • 1970-01-01
        相关资源
        最近更新 更多