我正在尝试合并大量.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
看起来这些CSV文件没有标题,因此Pandas正在尝试使用文件中的第一行作为标题。然后,当Pandas尝试将数据帧连接在一起时,它会尝试匹配它为每个文件推断的列名
我找到了抑制这种行为的方法:
您可以通过
names
参数为熊猫提供自己的列名。在这里,我只是提供col_0
、col_1
、col_2
等名称,因为我不知道它们应该是什么。如果您知道这些列应该是什么,那么应该更改names =
行我测试了这个脚本,但只使用了2个数据文件作为输入,而不是全部31个
PS:你考虑过使用Google BigQuery获取数据吗?我以前曾通过该界面与GDELT合作过,这更容易
相关问题 更多 >
编程相关推荐