You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取网页爬取CSV单元格内字段并拆分为独立数据列

众筹CSV嵌套creator字段提取方案

适用场景

爬取得到的众筹网站CSV数据包含ID、Pledge、creator三个字段,其中creator列为类JSON格式的嵌套字符串,混杂用户主页URL、创作者姓名、创作者ID三类信息,需要单独提取name、id字段生成独立列。


R语言实现(优先推荐)

依赖jsonlite做JSON解析,兼容空值、格式错误等脏数据场景:

  • 先安装缺失依赖(已经装过可以跳过)
    install.packages(c("dplyr", "jsonlite", "purrr"))
    
  • 完整解析代码
    library(dplyr)
    library(jsonlite)
    
    # 替换为你的本地CSV路径
    df <- read.csv("your_crowdfunding_file.csv", stringsAsFactors = FALSE)
    
    # 单条记录解析函数,自动兼容异常格式
    parse_creator_col <- function(x) {
      if (is.na(x) || nchar(trimws(x)) == 0) {
        return(data.frame(creator_name = NA_character_, creator_id = NA_character_))
      }
      tryCatch({
        parsed_json <- fromJSON(x)
        data.frame(
          creator_name = ifelse(is.null(parsed_json$name), NA_character_, as.character(parsed_json$name)),
          creator_id = ifelse(is.null(parsed_json$id), NA_character_, as.character(parsed_json$id))
        )
      }, error = function(e) {
        data.frame(creator_name = NA_character_, creator_id = NA_character_)
      })
    }
    
    # 批量解析并合并到原数据集
    df <- df %>%
      bind_cols(purrr::map_dfr(df$creator, parse_creator_col))
    

如果不想加载purrr包,可以把最后一步替换为基础R实现:

parsed_res <- do.call(rbind, lapply(df$creator, parse_creator_col))
df <- cbind(df, parsed_res)

Python实现方案

用pandas+内置json库即可实现,逻辑和R版本一致:

import pandas as pd
import json

# 替换为你的本地CSV路径
df = pd.read_csv("your_crowdfunding_file.csv")

def parse_creator_col(x):
    if pd.isna(x) or str(x).strip() == "":
        return pd.Series([None, None])
    try:
        parsed = json.loads(x)
        return pd.Series([parsed.get("name"), parsed.get("id")])
    except:
        return pd.Series([None, None])

df[["creator_name", "creator_id"]] = df["creator"].apply(parse_creator_col)

Stata实现方案

Stata原生JSON解析能力较弱,针对该固定格式的字段用正则提取即可,注意极端脏数据场景下兼容度不如前两种方案:

* 替换为你的本地CSV路径
import delimited "your_crowdfunding_file.csv", clear

* 提取创作者姓名字段
gen creator_name = ustrregexs(1) if ustrregexm(creator, `"name["\s:]+([^,"}]+)"')
* 提取创作者ID字段
gen creator_id = ustrregexs(1) if ustrregexm(creator, `"id["\s:]+([0-9a-zA-Z]+)"')

提示:如果数据中creator列格式错乱的记录占比高,建议先用R或Python完成字段解析,再导出为CSV导入Stata做后续统计分析,避免正则漏匹配。

内容的提问来源于stack exchange,提问作者Juno Oh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 20:36:33