Pandas行转列与列装行

实际上,两种操作的核心代码确实非常相似,因为它们都涉及到将 JSON 数据解析并进行拆分。主要的区别在于操作的顺序和处理的对象:

  1. 一列转多列:
    • 首先,我们将 JSON 数据列中的每个 JSON 对象解析为 Python 字典(使用 json.loads())。
    • 然后,我们使用 pd.json_normalize() 函数将解析后的字典列表展开为多列,并与原始 DataFrame 进行连接。
  1. 一行转多行:
    • 首先,我们使用 explode() 方法将 JSON 数据列中的每个 JSON 数组展开为多行,并重置索引。
    • 然后,我们将重置索引后的 DataFrame 中的每行的 JSON 数据解析为 Python 字典(使用 json.loads())。
    • 最后,我们再次使用 pd.json_normalize() 函数将解析后的字典列表展开为多列,并与原始 DataFrame 进行连接。

所以,尽管代码实现上看起来非常相似,但是操作的顺序和处理的对象是有区别的。在一列转多列的情况下,我们是将每个 JSON 对象中的键值对转换为多列;而在一行转多行的情况下,我们是将每个 JSON 数组中的元素转换为多行,然后再将每行的 JSON 数据拆分为多列。

行转列

import pandas as pd
import json
from pandas import json_normalize

# 创建示例 DataFrame
data = {
    "id": [1, 2, 3],
    "json_array_column": [
        '[{"name": "Alice", "age": 30, "is_active": true}, {"name": "Bob", "age": 40, "is_active": false}]',
        '[{"name": "Charlie", "age": 35, "is_active": true}, {"name": "David", "age": 45, "is_active": false}]',
        '[{"name": "Eve", "age": 25, "is_active": true}]'
    ]
}

df = pd.DataFrame(data)

# 将 JSON 数组列压平为多行
df = df.explode("json_array_column").reset_index(drop=True)

# 使用 json.loads() 解析 JSON 字符串
df["json_array_column"] = df["json_array_column"].apply(json.loads)

# 使用 json_normalize() 函数将 JSON 数据压平为多列
df = pd.concat([df.drop(columns=["json_array_column"]), json_normalize(df["json_array_column"])], axis=1)

# 打印处理后的 DataFrame

df

列转行

import pandas as pd
from pandas import json_normalize
import json

# 创建示例 DataFrame
data = {
    "id": [1, 2, 3],
    "json_array_column": [
        '[{"name": "Alice", "age": 30, "is_active": true}, {"name": "Bob", "age": 40, "is_active": false}]',
        '[{"name": "Charlie", "age": 35, "is_active": true}, {"name": "David", "age": 45, "is_active": false}]',
        '[{"name": "Eve", "age": 25, "is_active": true}]'
    ]
}

df = pd.DataFrame(data)

# 使用 apply + json.loads + explode 实现一行变多行
df = df.assign(json_array_column=df['json_array_column'].apply(json.loads)).explode('json_array_column')

# 重置索引
df.reset_index(drop=True, inplace=True)

# 打印处理后的 DataFrame
print(df)

json array数据展开

import pandas as pd
from pandas import json_normalize
import json

# 创建示例 DataFrame
data = {
    "id": [1, 2, 3],
    "json_array_column": [
        '[{"name": "Alice", "age": 30, "is_active": true}, {"name": "Bob", "age": 40, "is_active": false}]',
        '[{"name": "Charlie", "age": 35, "is_active": true}, {"name": "David", "age": 45, "is_active": false}]',
        '[{"name": "Eve", "age": 25, "is_active": true}]'
    ]
}

df = pd.DataFrame(data)

# 使用 apply + json.loads + explode 实现一行变多行
df = df.assign(json_array_column=df['json_array_column'].apply(json.loads)).explode('json_array_column').reset_index(drop=True)

# 使用 json_normalize() 函数将 JSON 数据的键值对作为列
df = pd.concat([df.drop(columns=["json_array_column"]), json_normalize(df['json_array_column'])], axis=1)

# 重置索引
df.reset_index(drop=True, inplace=True)

# 打印处理后的 DataFrame
df
上一篇:vivoxfold什么时候上市(vivofold3什么时候出)
下一篇:seo外链怎么发才能效果最大化