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

Pandas DataFrame无法创建new_url列问题求助

问题解决:Pandas无法生成new_url列并导出

问题原因

你的代码里使用df.iloc[i]['new_url']这种链式索引赋值,本质是修改了DataFrame的临时副本,而非原DataFrame本身。即使打印出了正确结果,原数据里的new_url列并没有被实际更新,甚至可能因为初始时未创建该列,导致导出时完全缺失。

解决方案

方法1:修正循环赋值逻辑(推荐先初始化列)

先创建new_url列并初始化,然后用.loc直接定位行和列赋值,确保修改的是原DataFrame:

import pandas as pd 
import url_parser
from url_parser import get_url

# 读取数据
df = pd.read_csv("C:\\Users\\myuser\\Desktop\\raw_data.csv", sep=';')

# 先初始化new_url列,避免列不存在的问题
df['new_url'] = ''

# 循环遍历,用.loc赋值
for idx, x in enumerate(df['domain']):
    print("*", x, "*")
    if '.cdn.' in x:
        parsed_url = x.split('.cdn')[0]
        print(parsed_url)
        df.loc[idx, 'new_url'] = parsed_url
    else:
        url_obj = get_url(x)
        parsed_url = f"{url_obj.domain}.{url_obj.top_domain}"
        print(parsed_url)
        df.loc[idx, 'new_url'] = parsed_url

# 导出数据(添加index=False避免导出索引列)
df.to_csv("C:\\Users\\myuser\\Desktop\\cleanurl.csv", sep=';', index=False)

方法2:用apply替代循环(更符合Pandas风格)

Pandas推荐用向量化操作或apply替代显式循环,代码更简洁高效:

import pandas as pd 
import url_parser
from url_parser import get_url

df = pd.read_csv("C:\\Users\\myuser\\Desktop\\raw_data.csv", sep=';')

def parse_domain(domain):
    if '.cdn.' in domain:
        return domain.split('.cdn')[0]
    else:
        url_obj = get_url(domain)
        return f"{url_obj.domain}.{url_obj.top_domain}"

# 生成new_url列
df['new_url'] = df['domain'].apply(parse_domain)

# 打印验证结果
print(df[['domain', 'new_url']])

# 导出数据
df.to_csv("C:\\Users\\myuser\\Desktop\\cleanurl.csv", sep=';', index=False)

关键说明

  • 链式索引(如df.iloc[i]['col'])会触发Pandas的SettingWithCopyWarning,这是因为它返回的是原数据的视图或副本,修改操作不保证作用在原数据上。
  • 用.loc[row_idx, col_name]是修改原DataFrame的安全方式。
  • apply方法更符合Pandas的设计理念,处理大数据集时比显式循环效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:25:41