如何使用pyarrow.read_csv添加/更改列名称?

偶氮91

我目前正在尝试将没有任何标题的大csv文件(50GB +)导入到pyarrow表中,总体目标是将此文件导出为Parquet格式,并进一步在Pandas或Dask DataFrame中进行处理。如何在pyarrow中为csv文件指定列名和列dtype?

我已经考虑过将标头附加到csv文件中。这将强制完全重写文件,这看起来像是不必要的开销。据我所知,pyarrow提供了用于定义特定列的dtypes的架构,但是在将csv文件转换为箭头表时,文档缺少这样做的具体示例。

想象一下,此csv文件仅具有一个简单示例,即“ A”和“ B”两列。我当前的代码如下所示:

import numpy as np
import pandas as pd
import pyarrow as pa
df_with_header = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})

print(df_with_header)
df_with_header.to_csv("data.csv", header=False, index=False)

df_without_header = pd.read_csv('data.csv', header=None)
print(df_without_header)
opts = pa.csv.ConvertOptions(column_types={'A': 'int8',
                                            'B': 'int8'})

table = pa.csv.read_csv(input_file = "data.csv", convert_options = opts)
print(table)

如果我打印出最终表,它不会更改列名。

pyarrow.Table
1: int64
3: int64

现在如何更改已加载的列名和dtypes?例如,是否还可能传递包含名称及其dtype的字典?

0x26分辨率

您可以为列指定类型替代:

    fp = io.BytesIO(b'one,two,three\n1,2,3\n4,5,6')
    fp.seek(0)
    table = csv.read_csv(
        fp,
        convert_options=csv.ConvertOptions(
            column_types={
                'one': pa.int8(),
                'two': pa.int8(),
                'three': pa.int8(),
            }
        ))

但是在您的情况下,您没有标题,据我所知,箭头不支持此用例:

    fp = io.BytesIO(b'1,2,3\n4,5,6')
    fp.seek(0)
    table = csv.read_csv(
        fp,
        parse_options=csv.ParseOptions(header_rows=0)
    )

这引起了:

pyarrow.lib.ArrowInvalid: header_rows == 0 needs explicit column names

代码在这里:https : //github.com/apache/arrow/blob/3cf8f355e1268dd8761b99719ab09cc20d372185/cpp/src/arrow/csv/reader.cc#L138

这类似于这个问题的Apache箭头-读取CSV文件

在下一版本中应该对此进行修复:https : //github.com/apache/arrow/pull/4898

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Pyarrow更改镶木地板文件中的列名?

Pyarrow read_csv如何处理不同的文件编码?

如何使用pyarrow更改列数据类型

在Dask中使用read_csv进行列名移动

如何在使用read_csv保持第一行作为列名的同时跳过csv文件的第二行?

严重错误:使用read_csv模块时,“列表对象”没有属性“名称”

更改列数时,熊猫read_csv添加标头名称

如何将 PyArrow 表转换为内存中的 csv

如何使用名称列表更改pandas Dataframe中的列名称?

如何使用数字和空格使 read_csv 更灵活

如何使用熊猫read_csv创建循环?

使用熊猫的read_csv时如何设置变量

熊猫:使用read_csv时如何包含双引号?

熊猫-使用read_csv读取时间

如何使用pyarrow在HDFS上编写

如何在更改列名称的同时正确读取Ps中的csv

使用数据流将数据导出到csv时如何添加列名称作为标题

如何使用列值更改结构中的 df 列名称

如果csv为空,如何不read_csv

使用.read_csv读取csv文件的所有行

在R中使用read_csv导入多个csv文件

添加新的列名称以在spread()中使用

read_csv在列名后附加.1

如何为每个csv文件使用read_csv,即使它为空?蟒蛇熊猫

如果将csv存储为变量,如何使用pandas read_csv()方法?

如何使用Pandas read_csv解析Cloud SQL CSV导出空值(“ N”)

read_csv()解析错误消息,该如何解释?

如何熊猫每行read_csv多个记录

如何從 Pandas read_csv 獲取值/行