如何在Pandas DataFrame中新增列并设置默认数组值?
优化DataFrame新增向量列的实现方法
嘿,我来帮你搞定这个问题!你原来的代码里LangVec那行有个小语法问题,而且直接赋值同一个数组还会有引用共享的隐患——先给你拆解下问题,再给两种高效的实现方式。
首先说你原代码的问题:pd.Series[[0,0,0,0,0,0,0,0,0,0]]是错误的写法,就算改成正确的pd.Series([[0]*10]*len(tweets)),所有行的LangVec都会指向同一个列表对象,后续你修改某一行的数组元素时,所有行的内容都会跟着变,这肯定不是你想要的结果。
下面是两种比循环更高效的实现方式:
方法1:列表推导式(推荐,性能最优)
列表推导式是Python里生成批量数据最快的方式之一,直接给LangVec列生成每行独立的长度为10的0数组:
import pandas as pd # 先复制原始DataFrame,避免修改原数据(可选但推荐) tweets = train_tweets.copy() # 新增LangClass列,所有值设为"und" tweets["LangClass"] = "und" # 生成每行独立的0数组列 tweets["LangVec"] = [[0]*10 for _ in range(len(tweets))]
方法2:用apply生成独立数组
如果你更喜欢DataFrame的原生方法,也可以用apply来生成,虽然性能比列表推导式稍差,但代码可读性也不错:
tweets["LangVec"] = tweets.apply(lambda _: [0]*10, axis=1)
后续更新示例
当你需要更新某一行的LangVec元素时,直接用loc定位后修改即可,因为每行的数组都是独立的,不会互相影响:
# 比如修改第5行的第2个元素为1 tweets.loc[5, "LangVec"][2] = 1
这两种方法都比循环遍历每行赋值高效得多,尤其是当你的DataFrame数据量很大的时候,性能提升会非常明显。
内容的提问来源于stack exchange,提问作者Spock_42
相关产品推荐
相关产品推荐

