Kal*_*nji 7 python pandas aws-lambda
我有一个简单的 Lambda 代码来从 S3 Bucket 读取 csv 文件。一切正常,但我尝试将 csv 数据获取到 pandas 数据框,但出现错误string indices must be integers
我的代码是沼泽标准的,但我只需要使用 csv 作为数据框进行进一步操作。散列线是错误的来源。我可以毫无问题地打印数据,因此存储桶和文件详细信息配置正确。
更新的代码
import json
import pandas as pd
import numpy as np
import requests
import glob
import time
import os
from datetime import datetime
from csv import reader
import boto3
import traceback
import io
s3_client = boto3.client('s3')
def lambda_handler(event, context):
try:
bucket_name = event["Records"][0]["s3"]["bucket"]["name"]
s3_file_name = event["Records"][0]["s3"]["object"]["key"]
resp = s3_client.get_object(Bucket=bucket_name, Key=s3_file_name)
data = resp['Body'].read().decode('utf-8')
df=pd.DataFrame( list(reader(data)))
print (df.head())
except Exception as err:
print(err)
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello fr2om Lambda!')
}
traceback.print_exc()
Run Code Online (Sandbox Code Playgroud)
Lif*_*lex 10
我相信您的问题可能与函数中的这一行 - df=pd.DataFrame( list(reader(data)))相关。下面的答案应该允许您将 csv 文件读入 pandas 数据帧中以进行处理。
import boto3
import pandas as pd
from io import BytesIO
s3_client = boto3.client('s3')
def lambda_handler(event, context):
try:
bucket_name = event["Records"][0]["s3"]["bucket"]["name"]
s3_file_name = event["Records"][0]["s3"]["object"]["key"]
resp = s3_client.get_object(Bucket=bucket_name, Key=s3_file_name)
###########################################
# one of these methods should work for you.
# Method 1
# df_s3_data = pd.read_csv(resp['Body'], sep=',')
#
# Method 2
# df_s3_data = pd.read_csv(BytesIO(resp['Body'].read().decode('utf-8')))
###########################################
print(df_s3_data.head())
except Exception as err:
print(err)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16722 次 |
| 最近记录: |