我认为这个解决方案有问题,特别是在需要迭代地向大型 CSV 文件中添加多列时。
一种解决方案是接受 CSV 文件存储转置的数据框。即,标题作为索引,反之亦然。
优点是您不会浪费计算能力进行难以理解的操作。
下面是常规追加模式(mode='a'
)和向长度为 5000 的系列追加 100 次列的追加列方法的操作时间:
缺点是,为了在其他目的中读取csv文件时获得“预期”的dataframe,您必须转置数据框。
绘图代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import datetime as dt
col = []
row = []
N = 100
for i in range(N):
t1 = dt.datetime.now()
data = pd.DataFrame({f'col_{i}':np.random.rand(5000)}).T
data.to_csv('test_csv_data1.txt',mode='a',header=False,sep="\t")
t2 = dt.datetime.now()
row.append((t2-t1).total_seconds())
pd.DataFrame({}).to_csv('test_csv_data2.txt',header=True,sep="\t")
for i in range(N):
t1 = dt.datetime.now()
data = pd.read_csv('test_csv_data2.txt',sep='\t',header=0)
data[f'col_{i}'] = np.random.rand(5000)
data.to_csv('test_csv_data2.txt',header=True,sep="\t")
t2 = dt.datetime.now()
col.append((t2-t1).total_seconds())
t = pd.DataFrame({'N appendices':[i for i in range(N)],'append row':row,'append col':col})
t = t.set_index('N appendices')
resultsFile
现有内容是什么样子?(手动检查文件以确认)2)scores
DataFrame是什么样子?(scores.head(10)
应该足够了) - Paul Hscores
数据帧附加到文件的末尾,因为这是 pandas 的to_csv
功能的工作方式。如果您想将scores
作为原始 csv 数据帧上的新列附加,则需要将 csv 读入数据帧,附加scores
列,然后将其写回到 csv。 - alacyresultsFile
是一个包含5列的csv文件:'timestamp', 'value', 'aaa', 'bbb', 'label'。我希望第6列是scores
DataFrame。我已经验证了所有列的长度都相同。scores
有一个名为's'的列标题。 - BoltzmannBraindf.to_csv
写入f2.csv
文件,并且您现有的文件名为f1.csv
... 并且您正在使用*nix
,那么您可以直接使用 paste 命令:paste -d", " f1.csv f2.csv > output.csv
。 - Anzel