【发布时间】:2019-05-02 01:30:46
【问题描述】:
我的目标是打开一个非常大的 csv 文件,读取该文件,然后对数据子集进行处理。在这种情况下,“stuff”正在写入一个空白的 csv,但将来它将在数据上运行函数,一次 200 行(由于某种原因,这节省了我的计算时间,通过运行整个 csv函数)。
我目前的问题是,当我写一个空白的csv时,如果我使用header = False,我没有标题,但如果我拿出那个命令,我每200行就有一个标题。如果可能的话,我希望标题在顶部一次?
with open(csvFile, encoding = 'utf8', errors = 'ignore') as csv_file:
chunksize = 200
i = 0
j = 1
for df in pd.read_csv(csv_file, encoding = 'utf-8', chunksize=chunksize, iterator=True):
df.index += j
i+=1
df.to_csv('test.csv', mode = 'a', sep = ',', encoding='utf-8', header=False, index=False)
j = df.index[-1] + 1
【问题讨论】:
-
for df in pd.read_csv是超级令人困惑的语法顺便说一句,因为它根本不是df。出于所有意图和目的,该名称是为pandas.DataFrame()保留的。 -
其次,根据我对问题的理解,这是完全可能的,但我们缺少代码实际作用的细节
-
不,实际上,我的 cmets 没有意义,但“(由于某种原因,这节省了我的计算时间,通过函数运行整个 csv)”。我现在会留下我的(不正确的)cmets,因为这是你的问题让我的想法下降的途径,但该声明暗示了一个更广泛的问题 IMO。我无法看到像这样以块的形式处理文件并追加出来会更快,除非您在不适合内存的 CSV 上处理内存
-
@roganjosh,注意
read_csv中的iterator=True。这会导致read_csv返回一个迭代器,而不是通过 for 循环循环时,将返回单个数据帧 (df)。 -
@Kyle 请在我编辑后查看我的最后一条评论。如果您看到我遗漏的内容,请添加到答案中,我会投票
标签: python python-3.x pandas loops export-to-csv