在Python中合并.csv文件合并文件数据错误Jupyter Lab

2024-10-03 11:26:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试合并大量.csv文件。它们都有相同的表格格式,每个表格有60列。我的合并表结果显示数据很好,除了第一行由640列组成,而不是60列。合并的.csv的其余部分由所需的60列格式组成。不确定合并过程中哪里出错

问题行中的第一项是20140308.export.CSV中的第一项,而第二项(从第61列开始)是20140313.export.CSV中的第一项。第一个.csv文件是20140301.export.csv,最后一个是20140331.export.csv(YYYYMMDD.export.csv),总共有31个.csv文件。这意味着问题行由来自不同.csv文件的第一项组成

数据来自http://data.gdeltproject.org/events/index.html。特别是2014年3月1日至3月31日。检查每个.csv文件的下载情况表明,每个文件的格式都是相同的,使用制表符分隔符和逗号分隔值

我使用的代码如下。如果还有什么我可以发布的,请告诉我。所有这些都是通过Jupyter实验室通过谷歌云平台运行的。谢谢你的帮助

import glob
import pandas as pd

file_extension = '.export.CSV'
all_filenames = [i for i in glob.glob(f"*{file_extension}")]
combined_csv_data = pd.concat([pd.read_csv(f, delimiter='\t', encoding='UTF-8', low_memory= False) for f in all_filenames])
combined_csv_data.to_csv('2014DataCombinedMarch.csv')

我使用以下bash代码下载数据:

!curl -LO http://data.gdeltproject.org/events/[20140301-20140331].export.CSV.zip

我使用以下代码解压数据:

!unzip -a "********".export.CSV.zip

我使用以下代码传输到我的存储桶:

!gsutil cp 2014DataCombinedMarch.csv gs://ddeltdatabucket/2014DataCombinedMarch.csv

Tags: 文件csv数据代码orghttpdata格式
1条回答
网友
1楼 · 发布于 2024-10-03 11:26:03

看起来这些CSV文件没有标题,因此Pandas正在尝试使用文件中的第一行作为标题。然后,当Pandas尝试将数据帧连接在一起时,它会尝试匹配它为每个文件推断的列名

我找到了抑制这种行为的方法:

import glob
import pandas as pd


def read_file(f):
    names = [f"col_{i}" for i in range(58)]
    return pd.read_csv(f, delimiter='\t', encoding='UTF-8', low_memory=False, names=names)


file_extension = '.export.CSV'
all_filenames = [i for i in glob.glob(f"*{file_extension}")]

combined_csv_data = pd.concat([read_file(f) for f in all_filenames])
combined_csv_data.to_csv('2014DataCombinedMarch.csv')

您可以通过names参数为熊猫提供自己的列名。在这里,我只是提供col_0col_1col_2等名称,因为我不知道它们应该是什么。如果您知道这些列应该是什么,那么应该更改names =

我测试了这个脚本,但只使用了2个数据文件作为输入,而不是全部31个

PS:你考虑过使用Google BigQuery获取数据吗?我以前曾通过该界面与GDELT合作过,这更容易

相关问题 更多 >