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

Python如何将CSV两列数据合并为带层级缩进的单列

Python实现CSV大洲-国家层级格式化

核心逻辑

逐行读取原始CSV时维护一个缓存变量存当前所属大洲:

  • 若当前行Continent列非空,更新缓存值,将大洲名作为无缩进顶级条目
  • 若当前行Continent列为空,说明该行Countries列内容归属当前缓存大洲,给国家名加4空格缩进后作为子条目
  • 所有条目整理完成后可直接打印预览,或写入新的单列CSV文件

可运行代码

方案1:原生csv模块实现(无第三方依赖)

import csv

input_path = "你的原始CSV文件路径.csv"
output_path = "格式化后输出文件.csv"
indent = "    "  # 4空格匹配示例缩进效果
result = ["Continent"]
current_cont = ""

with open(input_path, "r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        cont_val = row["Continent"].strip()
        country_val = row["Countries"].strip()

        if cont_val:
            current_cont = cont_val
            # 按需配置缩写转全称映射
            if current_cont == "North Am.":
                current_cont = "North America"
            result.append(current_cont)
        
        if country_val:
            result.append(f"{indent}{country_val}")

# 控制台打印预览
print("Continent")
print("-----------")
for line in result[1:]:
    print(line)

# 写入新CSV
with open(output_path, "w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["Continent"])
    for line in result[1:]:
        writer.writerow([line])

方案2:pandas实现(适合大数据量场景)

import pandas as pd

df = pd.read_csv("你的原始CSV文件路径.csv")
# 向前填充空的大洲单元格,将空值替换为上一行的大洲名
df["Continent"] = df["Continent"].str.strip().replace("", pd.NA).ffill()
# 大洲名标准化映射
name_map = {"North Am.": "North America"}
df["Continent"] = df["Continent"].replace(name_map)

output = []
# 按大洲分组拼接层级内容
for cont, group in df.groupby("Continent", sort=False):
    output.append(cont)
    for country in group["Countries"].str.strip():
        output.append(f"    {country}")

# 控制台预览
print("Continent\n-----------")
print("\n".join(output))

# 保存结果
pd.DataFrame({"Continent": output}).to_csv("格式化后输出文件.csv", index=False)

输出效果

运行后得到的结果和需求完全一致:

Continent
-----------
Asia
    China
    Japan
    Korea
North America
    Canada
    U.S.

如果有其他大洲缩写需要转全称,直接在代码的映射规则里加对应键值对即可,缩进长度也可以通过修改indent变量的空格数调整。

内容的提问来源于stack exchange,提问作者Rebekah Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:06:31