【发布时间】:2020-01-18 20:45:45
【问题描述】:
我目前有 31 个 .csv 文件(都具有相同的结构 - 60 列宽和大约 5000 行深),我正在尝试使用“FOR”循环从谷歌存储桶读取到 1 个熊猫数据帧我在 6 分钟后不断收到“超时”错误。
在进行一些测试时,我注意到我可以一次读取一个 .csv 文件,但是一旦我引入 2 个或更多,我就会收到超时错误。这让我觉得我的代码是问题而不是数据的大小。
代码如下(我应该在 for 循环的任何阶段使用 pd.concat 吗?)将不胜感激
def stage1eposdata(data, context):
from google.cloud import storage
from google.cloud import bigquery
import pandas as pd
import dask.dataframe as dd
import io
import numpy as np
import datetime as dt
from googleapiclient import discovery
from pandas.io.json import json_normalize
import google.auth
import math
destination_path1 = 'gs://staged_data/ddf-*_stet.csv'
## Source Buckets #
raw_epos_bucket = 'raw_data'
cleaned_epos_bucket = 'staged_data'
# Confirming Oauth #
storage_client = storage.Client()
bigquery_client = bigquery.Client()
# Confirming Connection #
raw_epos_data = storage_client.bucket(raw_epos_bucket)
cleaned_epos_data = storage_client.bucket(cleaned_epos_bucket)
df = pd.DataFrame()
for file in list(raw_epos_data.list_blobs(prefix='2019/')):
file_path="gs://{}/{}".format(file.bucket.name, file.name)
df = df.append(pd.read_csv(file_path),sort =False)
ddf = dd.from_pandas(df,npartitions=1, sort=True)
ddf.to_csv(destination_path1, index=True, sep=',')
【问题讨论】:
-
尝试保存在列表中,然后在循环之外使用
pd.concat加入它们。在每个迭代循环中,您将数据帧存储在列表中的某个位置,例如将其称为my_dataframe_list。循环外:pd.concat(my_dataframe_list)。告诉我它是否有效。请注意,这种方式不会在循环的每次迭代中使用 append 方法 -
那么
my_dataframe_list代码行在 for 循环中会是什么样子?我很好奇如何避免在此步骤中使用append方法 -
我添加了一个答案,如果它不起作用我尝试编辑它
标签: python-3.x pandas google-cloud-storage dask