Pandas - 如何对由列表对象组成的列进行子集化?
Pandas - How do I subset a column composed of list objects?
我正在处理我从 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 中的一列称为 "days",其值是格式如下的列表:
[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?),但被告知 "name 'Series' is not defined"。尝试更改为 "pd.Series" 这似乎适用于该命令但在后面的命令中失败。
肯定有一种简单、直接的方法可以将这些列表分解成单独的列吗?
让我们定义一个列表 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)
从列表创建列的简单方法如下:
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
使用星号以天为单位解压缩参数,将它们放在单独的列中。
我正在处理我从 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 中的一列称为 "days",其值是格式如下的列表:
[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?),但被告知 "name 'Series' is not defined"。尝试更改为 "pd.Series" 这似乎适用于该命令但在后面的命令中失败。
肯定有一种简单、直接的方法可以将这些列表分解成单独的列吗?
让我们定义一个列表 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)
从列表创建列的简单方法如下:
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
使用星号以天为单位解压缩参数,将它们放在单独的列中。