我正在Google Colab上编写一个python方法,以便进入84个.csv的文件夹,将它们连接起来并输出一个新的.csv
这是方法
def concatenate(indirectory = "/content/gdrive/My Drive/Folder/Folder", outfile = "/content/gdrive/My Drive/--.csv"):
os.chdir(indirectory)
fileList = glob.glob("*.csv")
dfList = []
colnames = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"]
for filename in fileList:
print(filename)
df = pd.read_csv(filename, header = None)
dfList.append(df)
concatDf = pd.concat(dfList, axis = 0)
concatDf.columns = colnames
concatDf.to_csv(outfile, index = None)
这种方法可以将文件串联到一定程度,将标题复制到新行中,我手动删除了这些行,但是很高兴知道如何在方法中删除它们。
但是,出于我不了解的原因,这采用了列A中保存的一些ID,并在列A为空的行中重复了它们。直到我开始对涉及A列和
的数据进行一些分析之后,我才意识到aCount = df['A'].value_counts()
正在显示一些ID多次复制到空行中。
过去2天我一直在尝试,无法弄清楚我的方法出了什么问题。
答案 0 :(得分:0)
看起来您的列索引可能有问题。标题重复是由于您告诉熊猫您的csvs没有标题而引起的,因此它正在将csv的第一行作为数据读取,但听起来标题确实存在,因此它们被作为数据包含在数据帧中。可能这也弄乱了您的索引,可能导致数据重复。
for filename in fileList:
print(filename)
df = pd.read_csv(filename) # if the headers are the same, use them (i.e. don't use header=None if the headers are present)
# df.columns = colnames # if they are not the same, you should make them the same
dfList.append(df)
concatDf = pd.concat(dfList, axis=0) # you can also add arg ignore_index=True to concat on column order rather than column name
concatDf.to_csv(outfile, index=False)