Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中合并.csv文件-合并文件数据错误-Jupyter实验室_Python_Pandas_Csv_Jupyter Lab - Fatal编程技术网

在Python中合并.csv文件-合并文件数据错误-Jupyter实验室

在Python中合并.csv文件-合并文件数据错误-Jupyter实验室,python,pandas,csv,jupyter-lab,Python,Pandas,Csv,Jupyter Lab,我正在尝试合并大量.csv文件。它们都有相同的表格格式,每个表格有60列。我的合并表结果显示数据很好,除了第一行由640列组成,而不是60列。合并的.csv的其余部分由所需的60列格式组成。不确定合并过程中哪里出错 问题行中的第一项是20140308.export.CSV中的第一项,而第二项(从第61列开始)是20140313.export.CSV中的第一项。第一个.csv文件是20140301.export.csv,最后一个是20140331.export.csv(YYYYMMDD.expor

我正在尝试合并大量.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文件的第一项组成

数据来源于。特别是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
我使用以下代码解压数据:

!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尝试将数据帧连接在一起时,它会尝试匹配它为每个文件推断的列名

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

导入全局
作为pd进口熊猫
def read_文件(f):
名称=[f“col_{i}”表示范围内的i(58)]
返回pd.read\u csv(f,分隔符='\t',编码='UTF-8',低内存=False,名称=名称)
文件扩展名='.export.CSV'
all_filename=[glob.glob(f“*{file_extension}”)中的i代表i]
组合的\u csv\u data=pd.concat([读取所有\u文件名中的f的\u文件(f)])
合并的\u csv\u数据到\u csv('2014DataCombinedMarch.csv')
您可以通过
names
参数为熊猫提供自己的列名。在这里,我只是提供了
列0
列1
列2
等名称,因为我不知道它们应该是什么。如果您知道这些列应该是什么,那么应该更改
names=

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

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