gpt4 book ai didi

python - 有效地垂直增长大型数据框

转载 作者:行者123 更新时间:2023-11-30 22:04:12 24 4
gpt4 key购买 nike

我有以下代码,它递归地迭代包含数千个 csv 的目录,并尝试读取它们并将它们全部添加到一个 DataFrame 中:

df = pd.DataFrame()
symbol = symbol.upper()

for filepath in glob.iglob(r'W:\data\{0}\option\**\**\**.csv'.format(188), recursive=True):

optionNameCSI = filepath.split("\\")[-1].split('.')[0]
try:
tmp = pd.read_csv(filepath, engine='c')
strike = tmp['Strike'].iloc[-1]
expiry = pd.to_datetime(tmp['Option Expiration Date'].iloc[-1])
m = expiry.month
y = expiry.year
PutCall = tmp['PutCall'].iloc[-1]
future = symbol + numToLetter[m] + str(y)
except (IndexError, KeyError) as e:
continue

if tmp.empty:
df = tmp
else:
df = df.append(tmp)

print(optionName, 'loaded')

但是,这段代码一开始迭代速度非常快,然后速度呈指数级下降,并且永远无法完成。我做错了什么吗?我知道文件路径都已正确获取,因此问题在于 DataFrame 的增长。

最佳答案

考虑将代码分成单独的函数,如下所示:

def get_data_from_csv(filepath):
optionNameCSI = filepath.split("\\")[-1].split('.')[0]
try:
df = pd.read_csv(filepath, engine='c')
# do stuff ...
return df
except (IndexError, KeyError) as e:
return

然后您可以使用列表理解来收集列表中的所有数据,就像上面的人建议的那样

filepaths = glob.iglob(r'W:\data\{0}\option\**\**\**.csv'.format(188), recursive=True)
result = [get_data_from_csv(filepath) for filepath in filepaths]
result = [r for r in result if r is not None] # remove 'None' values

然后使用pd.concat连接数据

df = pd.concat(result)

关于python - 有效地垂直增长大型数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53376912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com