生成含Sq. feet、Price、Borough的虚拟CSV数据时Borough列异常排查
问题原因与解决方法
问题原因
你当前的代码只执行了一次random.randrange(len(WORDS)),得到一个固定的整数索引(这里是5)。当把这个单一值赋值给DataFrame的Borough列时,pandas会将该标量值广播填充到所有行,导致整列显示同一个数字。random.randrange本身仅生成单个随机数,不会自动为每行生成新的随机索引。
解决方法
针对5万行的大数据量,推荐以下两种高效方案:
方案1:使用列表推导式逐行生成随机文本
import random import pandas as pd WORDS = ["Manhattan", "Brooklyn", "Queens", "Bronx", "Staten Island"] # 构建包含三列的数据字典 data = { "Sq. feet": [你的数值生成逻辑], # 替换为你已有的前两列生成代码 "Price": [你的数值生成逻辑], "Borough": [WORDS[random.randrange(len(WORDS))] for _ in range(50000)] } df = pd.DataFrame(data)
列表推导式会循环5万次,每次生成一个新的随机索引,再从WORDS中取出对应文本值,最终生成包含随机文本的列。
方案2:使用numpy的np.random.choice(更高效)
import numpy as np import pandas as pd WORDS = ["Manhattan", "Brooklyn", "Queens", "Bronx", "Staten Island"] data = { "Sq. feet": [你的数值生成逻辑], "Price": [你的数值生成逻辑], "Borough": np.random.choice(WORDS, size=50000) } df = pd.DataFrame(data)
np.random.choice可以直接从WORDS列表中随机选取指定数量(50000)的元素,底层是向量化操作,处理大数据量时比列表推导式更快。
内容的提问来源于stack exchange,提问作者Zarathustra
相关产品推荐
相关产品推荐

