我试图读取数据从CSV文件中存在的S3桶使用熊猫。然而,有时CSV文件只包含一列,这是我不想解析的。我只想分析CSV中有超过1列。有人能告诉我要检查的条件是,如果列数大于1,则只解析文件,否则退出循环。 下面是我正在尝试的代码。你知道吗
body = csv_obj['Body']
csv_string = body.read().decode('utf-8-sig')
df = pd.read_csv(StringIO(csv_string),usecols = [3,4,6])
下面是我尝试的第二个代码,但出现了错误:File "pandas\_libs\parsers.pyx", line 545, in pandas._libs.parsers.TextReader.__cinit__
pandas.errors.EmptyDataError: No columns to parse from file
代码:
import pandas as pd
import sys
from io import StringIO # Python 3.x
s3_client = session.client("s3")
s3_resource = session.resource("s3")
csv_obj = s3_client.get_object(Bucket="XXXX", Key="XXXXXXYYY.csv")
body = csv_obj['Body']
csv_string = body.read().decode('utf-8-sig')
df = pd.read_csv(StringIO(csv_string), nrows = 10)
if len(df.columns) > 1:
df = pd.read_csv(StringIO(csv_string),usecols = [3,4,6])
Products_list = df.values.tolist()
Products_list = str(Products_list)
print(Products_list)
这可能有助于:
解析所有文件,并检查
if len(df.columns) > 1
。你知道吗如果文件很大,可以通过使用
read_csv(nrows=N)
参数读取有限的行数来测试列数,如果测试列数成功,则重新读取整个文件。你知道吗我不确定循环代码是什么样子,下面是一个简单的示例,如果列数等于1,则返回nothing:
相关问题 更多 >
编程相关推荐