仅当列数超过1时才分析CSV文件的条件

2024-04-24 16:50:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图读取数据从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)

Tags: 文件csv代码objpandasdfreadstring
2条回答

这可能有助于:

import pandas as pd

# put your scv file instead of following url
url="https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv"
c = pd.read_csv(url)

if len(c.count()) > 1:
  # Your code
  print("Enjoy dude :)")

解析所有文件,并检查if len(df.columns) > 1。你知道吗

如果文件很大,可以通过使用read_csv(nrows=N)参数读取有限的行数来测试列数,如果测试列数成功,则重新读取整个文件。你知道吗

我不确定循环代码是什么样子,下面是一个简单的示例,如果列数等于1,则返回nothing:

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])
else:
    return

相关问题 更多 >