Python读取CSV生成DataFrame报错,求更优列筛选方法
问题分析与优化方案
嘿,我来帮你排查代码问题并给出更优的按列筛选方法~
首先,你的代码之所以报错,核心原因是:file是pandas的DataFrame对象,当你用for tweet in file遍历它时,实际上遍历的是DataFrame的列名(都是字符串),而不是带有.text属性的tweet对象,所以肯定会抛出类似AttributeError: 'str' object has no attribute 'text'的错误。
如果你的需求是从CSV文件中提取指定列(比如名为tweet的列),下面是几种简洁高效的方法,比手动循环靠谱多了:
方法1:读取时直接指定要加载的列
如果你的CSV本身就有tweet列,读取时直接指定要加载的列,既节省内存又高效:
import pandas as pd # 只加载索引列(第0列)和tweet列 df = pd.read_csv("C:\\Users\\Ankit\\Downloads\\file.csv", index_col=0, usecols=[0, "tweet"]) print(df)
方法2:读取后直接按列名提取
这是pandas里最常用的按列筛选方式,简单直接:
import pandas as pd file = pd.read_csv("C:\\Users\\Ankit\\Downloads\\file.csv", index_col=0) # 提取tweet列(用双括号保留为DataFrame,单括号会得到Series) df = file[["tweet"]] print(df)
要是你非得把列数据转成列表再创建新DataFrame(其实没必要,直接提取更高效),可以这么写:
import pandas as pd file = pd.read_csv("C:\\Users\\Ankit\\Downloads\\file.csv", index_col=0) # 先确认CSV里有'tweet'列哦 df = pd.DataFrame(data=file["tweet"].tolist(), columns=['tweet']) print(df)
方法3:用.loc做明确的标签筛选
如果需要更清晰地指定行和列(比如后续要加行筛选条件),可以用.loc:
import pandas as pd file = pd.read_csv("C:\\Users\\Ankit\\Downloads\\file.csv", index_col=0) # 提取所有行的tweet列 df = file.loc[:, ["tweet"]] print(df)
小提示
- 先运行
print(file.columns)看看CSV里的所有列名,确保tweet列确实存在,不然会报KeyError哦。 - 尽量别手动循环DataFrame提取数据,pandas的向量化操作比循环快得多,大数据集里差距特别明显。
内容的提问来源于stack exchange,提问作者ekta kumari
相关产品推荐
相关产品推荐

