Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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 在Dask中使用read_csv进行列名移位_Python_Pandas_Csv_Dask_Intake - Fatal编程技术网

Python 在Dask中使用read_csv进行列名移位

Python 在Dask中使用read_csv进行列名移位,python,pandas,csv,dask,intake,Python,Pandas,Csv,Dask,Intake,我正在尝试使用对csv数据集进行编目。它使用Dask实现,Dask实现又使用pandas实现 我看到的问题是,我加载的csv文件没有索引列,因此Dask将第一列解释为索引,然后将列名向右移动 例如: datetime(dt)列应该是第一列,但当读取csv时,它会被解释为索引,列名会发生移位,因此会从正确的位置偏移。我在read\u csv调用中提供列名称列表和dtypes字典 据我所知,如果我使用pandas,我会提供要修复的index\u col=Falsekwarg,如图所示,但Dask返回

我正在尝试使用对csv数据集进行编目。它使用Dask实现,Dask实现又使用pandas实现

我看到的问题是,我加载的csv文件没有索引列,因此Dask将第一列解释为索引,然后将列名向右移动

例如:

datetime(dt)列应该是第一列,但当读取csv时,它会被解释为索引,列名会发生移位,因此会从正确的位置偏移。我在read\u csv调用中提供列
名称
列表和
dtypes
字典

据我所知,如果我使用pandas,我会提供要修复的
index\u col=False
kwarg,如图所示,但Dask返回一个故意错误,说明:
关键字“index”和“index\u col”不受支持。使用dd.read\u csv(…)。改为设置索引('my-index')
。这似乎是由于并行化的限制

在这种情况下,建议的修复(使用
set\u index('my-index)
)无效,因为它需要读取整个文件,同时还要使用列名来设置索引。主要问题是,如果名称为offset,我无法准确设置索引列

在Dask中,加载不显式具有索引列的csv的最佳方式是什么,以便解释的索引列至少保留指定的列名

更多信息:

我正在使用的播放数据集:

我使用的Intraction catalog.yml文件如下所示:

name:
  intake-explore-catalog
metadata:
  version: 1
sources:
    ufo_sightings:
      description: data around ufo sightings
      driver: csv
      args:
        urlpath: "{{CATALOG_DIR}}/data/ufo_scrubbed.csv"
        csv_kwargs:
          header: 0
          names: ['dt', 'city', 'state', 'country', 'shape', 'duration_s', 'duration_hm', 'comments', 'date_posted', 'latitude']
          dtype: {'dt': 'str', 'city': 'str', 'state': 'str', 'country': 'str', 'shape': 'str', 'duration_s': 'str', 'duration_hm': 'str', 'comments': 'str', 'date_posted': 'str', 'latitude': 'str'}
          infer_datetime_format: true
      metadata:
        version: 1
        custom_field: blah
cat = intake.open_catalog("catalog.yml")
ufo_ds = cat.ufo_sightings.read()
我正在使用以下命令加载目录和相应的数据集:

name:
  intake-explore-catalog
metadata:
  version: 1
sources:
    ufo_sightings:
      description: data around ufo sightings
      driver: csv
      args:
        urlpath: "{{CATALOG_DIR}}/data/ufo_scrubbed.csv"
        csv_kwargs:
          header: 0
          names: ['dt', 'city', 'state', 'country', 'shape', 'duration_s', 'duration_hm', 'comments', 'date_posted', 'latitude']
          dtype: {'dt': 'str', 'city': 'str', 'state': 'str', 'country': 'str', 'shape': 'str', 'duration_s': 'str', 'duration_hm': 'str', 'comments': 'str', 'date_posted': 'str', 'latitude': 'str'}
          infer_datetime_format: true
      metadata:
        version: 1
        custom_field: blah
cat = intake.open_catalog("catalog.yml")
ufo_ds = cat.ufo_sightings.read()
这将产生如上所示的读入数据框和该数据的csv副本:

,dt,city,state,country,shape,duration_s,duration_hm,comments,date_posted,latitude
10/10/1949 20:30,san marcos,tx,us,cylinder,2700,45 minutes,This event took place in early fall around 1949-50. It occurred after a Boy Scout meeting in the Baptist Church. The Baptist Church sit,4/27/2004,29.8830556,-97.9411111
10/10/1949 21:00,lackland afb,tx,,light,7200,1-2 hrs,1949 Lackland AFB&#44 TX.  Lights racing across the sky & making 90 degree turns on a dime.,12/16/2005,29.38421,-98.581082
10/10/1955 17:00,chester (uk/england),,gb,circle,20,20 seconds,Green/Orange circular disc over Chester&#44 England,1/21/2008,53.2,-2.916667
10/10/1956 21:00,edna,tx,us,circle,20,1/2 hour,My older brother and twin sister were leaving the only Edna theater at about 9 PM&#44...we had our bikes and I took a different route home,1/17/2004,28.9783333,-96.6458333
10/10/1960 20:00,kaneohe,hi,us,light,900,15 minutes,AS a Marine 1st Lt. flying an FJ4B fighter/attack aircraft on a solo night exercise&#44 I was at 50&#44000&#39 in a "clean" aircraft (no ordinan,1/22/2004,21.4180556,-157.8036111
与原始/原始数据csv(无前导逗号)相比:

Dask调用:

df = dask.dataframe.read_csv('data/ufo_scrubbed.csv',
                            names=['dt',
                                   'city',
                                   'state',
                                   'country',
                                   'shape',
                                   'duration_s',
                                   'duration_hm',
                                   'comments',
                                   'date_posted',
                                   'latitude'],
                             dtype = {'dt': 'str',
                                       'city': 'str',
                                       'state': 'str',
                                       'country': 'str',
                                       'shape': 'str',
                                       'duration_s': 'str',
                                       'duration_hm': 'str',
                                       'comments': 'str',
                                       'date_posted': 'str',
                                       'latitude': 'str'}
                            )

不幸的是,标题行以逗号开头,这就是为什么列名以1开头。你最好去解决它,而不是去解决它

但是,如果不提供列名,则不会自动获取索引:

df = dask.dataframe.read_csv('file.csv', header=0)
这里的索引只是一个范围(每个分区从0开始计数)。然后可以在事件发生后指定列名

df2 = df.rename(columns=dict(zip(df.columns, df.columns[1:]), latitude='longitude')) 

单凭摄入处方无法实现这一点,您必须通过to_dask()或read()(分别用于dask或pandas输出)获取数据帧。

能否发布您正在使用的摄入块,以及等效的
dd.read_csv
调用?您的原始数据片段也很好。对不起,最好是CSV文件内容,作为复制/可复制文本而不是图像,以方便回答者的生活。我添加了更多信息,如果您需要更多信息,请告诉我。在读取原始数据的结果csv中显示了额外的未命名列,导致shiftI还为read_csv函数添加了dask调用。很尴尬,我没有注意到这一点。smh感谢您花时间调查此事!我又看了一眼原始数据,它的标题似乎没有以逗号开头。前面的逗号似乎是由
read\u csv
函数调用引入的。我认为问题在于我提供的列名列表的长度与数据中的列数不同。你是说read_csv后跟to_csv?如果你能制作一个小巧的复制机,这听起来像是一个你可以发布的bug。是的,这就是我在这过程中注意到的行为。这是一个很好的观点,我绝对可以尝试做一个全面的bug报告。再次感谢您的时间和帮助