在pandas中从s3阅读csv时看不到列名

xoefb8l8  于 6个月前  发布在  其他
关注(0)|答案(2)|浏览(49)

我使用下面的代码从s3 bucket中读取iris数据集。

import pandas as pd
import s3fs

s3_path = 's3://h2o-public-test-data/smalldata/iris/iris.csv'

s3 = s3fs.S3FileSystem(anon=True)
with s3.open(s3_path, 'rb') as f:
    df = pd.read_csv(f, header = True)

字符串
但是,列名只是数据集第一行的内容。我如何解决这个问题?

q5iwbnjs

q5iwbnjs1#

需要作出以下改动:

  1. s3_path应该忽略s3://
  2. iris.csv是一个没有头的文件。如果你需要一个有头的文件,那么你应该选择iris_wheader.csv文件。
    1.在read_csv头接受布尔值
    您的最终代码应该如下所示
import s3fs
import pandas as pd

s3 = s3fs.S3FileSystem(anon=True)

with s3.open('h2o-public-test-data/smalldata/iris/iris_wheader.csv', 'rb') as f:
    df = pd.read_csv(f, header=0)
    print(df.head())

字符串
编辑:您可以直接在pandas中读取文件,如下所示:

import pandas as pd

df = pd.read_csv('s3://h2o-public-test-data/smalldata/iris/iris_wheader.csv', header=0, storage_options={
    "anon": True
})
print(df.head())


你仍然需要安装s3fs。只是不需要打开文件来访问它。

xzv2uavs

xzv2uavs2#

所有参数请参见https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html
如果没有包含列名的CSV,则可以使用names参数指定所需的名称。在这种情况下,不需要将header设置为True。

df = pd.read_csv(file_path, names=['yan', 'tan', 'tetherer', 'mether', 'pip'])

字符串

相关问题