Dru*_*ter 5 json boolean dataframe python-3.x pandas
这是一个 JSON 字符串,其中包含一个对象列表,每个对象都嵌入了另一个列表。
[
{
"name": "Alice",
"hobbies": [
"volleyball",
"shopping",
"movies"
]
},
{
"name": "Bob",
"hobbies": [
"fishing",
"movies"
]
}
]
Run Code Online (Sandbox Code Playgroud)
使用pandas.read_json()它会变成这样的 DataFrame:
name hobbies
--------------------------------------
1 Alice [volleyball, shopping, movies]
2 Bob [fishing, movies]
Run Code Online (Sandbox Code Playgroud)
但是,我想将列表展平为这样的布尔列:
name volleyball shopping movies fishing
----------------------------------------------------
1 Alice True True True False
2 Bob False False True True
Run Code Online (Sandbox Code Playgroud)
即当列表包含一个值时,对应列中的字段用 Boolean 填充True,否则用False.
我也研究过pandas.io.json.json_normalize(),但这似乎也不支持这个想法。是否有任何内置方法(Python3 或 Pandas)来执行此操作?
(PS。我意识到在将整个列表加载到 DataFrame 之前,您可以编写自己的代码来“规范化”字典对象,但我可能会重新发明轮子,并且可能以一种非常低效的方式)。
crosstab您可以与cast to boolby一起使用astype:
df = pd.json_normalize(data, 'hobbies', ['name']).rename(columns={0:'hobby'})
print df
hobby name
0 volleyball Alice
1 shopping Alice
2 movies Alice
3 fishing Bob
4 movies Bob
print pd.crosstab(df.name, df.hobby).astype(bool)
hobby fishing movies shopping volleyball
name
Alice False True True True
Bob True True False False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1057 次 |
| 最近记录: |