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

如何导入CSV的数值列及JSON列中指定位置的变量?

当然可以通过位置序号来提取JSON里的指定变量!尤其是你的JSON里还存在重复键名(比如示例里的两个Lon),用位置选择反而比靠键名找靠谱得多——毕竟重复键名在常规解析时会被后面的覆盖,根本没法通过键名精准拿到你要的那一个。

方法一:用Python Pandas 按位置提取(最灵活稳妥)

这是处理这类需求最常用的方案,能完美应对重复键的问题:

首先导入需要的库:

import pandas as pd
import json

读取你的CSV文件:

df = pd.read_csv('your_data.csv')  # 替换成你的实际文件名

接下来写一个自定义函数,用来解析JSON并按位置提取元素——关键是用object_pairs_hook=list把JSON解析成有序的键值对列表,这样就能保留原始顺序,不会丢失重复键的数据:

def extract_json_by_pos(json_str, target_positions):
    # 解析JSON为有序键值对列表(保留原始顺序)
    parsed_json = json.loads(json_str, object_pairs_hook=list)
    # 按传入的位置序号提取元素,给重复键加位置后缀区分
    extracted = {}
    for idx in target_positions:
        if idx < len(parsed_json):
            key, value = parsed_json[idx]
            extracted[f"{key}_{idx+1}"] = value  # 比如Lon_1, Lon_2,避免键名冲突
    return extracted

然后把这个函数应用到你的JSON列上,比如你想提取第1个(索引0)和第4个(索引3)元素:

# 示例:提取位置0(Building Lat)和位置3(第二个Lon)
extracted_data = df['response'].apply(lambda x: extract_json_by_pos(x, [0, 3]))
# 合并原有数值列和提取的JSON数据
final_df = pd.concat([df[['address', 'zip']], pd.DataFrame(extracted_data.tolist())], axis=1)

这样你就得到了包含原有两列,加上你按位置选中的JSON变量的数据集。

注意:这里的位置序号是从0开始计数的,对应示例里的JSON:

{"Building Lat": "74.91", "Lon": "31.21", "Front Lat": "75.93", "Lon": "32.20"}

各元素的位置对应关系:

  • 0: ("Building Lat", "74.91")
  • 1: ("Lon", "31.21")
  • 2: ("Front Lat", "75.93")
  • 3: ("Lon", "32.20")
方法二:用命令行工具组合(适合快速处理)

如果你习惯用命令行,也可以用jq配合csvkit来实现:

  1. 先提取出CSV里的JSON列:
csvcut -c response your_data.csv > json_column.txt
  1. 用jq按位置提取(to_entries会把对象转成有序数组,索引从0开始):
jq -r 'to_entries | [.[0].value, .[3].value] | @csv' json_column.txt > extracted_json.csv
  1. 最后把原有数据和提取的JSON数据合并:
csvjoin -c 1,1 your_data.csv extracted_json.csv > final_output.csv

小提醒:部分版本的jq在处理重复键时,可能会默认保留最后一个键,所以如果你的JSON重复键较多,还是优先用Python的方法更稳妥。


内容的提问来源于stack exchange,提问作者Agustín Indaco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:07:19