从 for 循环输出 Python 连接大数据帧

Posted

技术标签:

【中文标题】从 for 循环输出 Python 连接大数据帧【英文标题】:To concatenate a big dataframe from for loop outputs Python 【发布时间】:2019-05-12 16:36:07 【问题描述】:

我正在尝试从每个 for 循环输出的切片结果中构建一个大数据集。

我制作的代码如下:

for n in range(4): 
    script_dir = os.path.dirname(directory)
    rel_path = files[n]
    abs_file_path = os.path.join(script_dir, rel_path)
    to_open = pd.read_csv(abs_file_path, header=0)
    to_open["Geographic Address"] = to_open["Geographic Address"].astype(str)
    to_open["Geographic Address"] = to_open["Geographic Address"].map(lambda x: x[3:-1])
    to_open = to_open[to_open["Geographic Address"] == ld_up[n]]
    to_open.index = range(len(to_open))
    ind = np.searchsorted(to_open["Time"], time[n])
    ind = np.asscalar(np.array(ind))
    UpperBound = ind - 30
    data = to_open.iloc[UpperBound:ind,:]

如您所见,从数据列中,如果我对输出进行切片,则仅显示案例 3 的输出,我想要一个大文件,同时包含案例 0, 1 ,2 ,3。

【问题讨论】:

欢迎来到 SO!将一些示例数据作为文本包含在内总是有帮助的。最简单的方法是将 df.head() 的输出粘贴到问题中的代码块中 您是想将数据切片组合成单列数据,还是对应于案例 0、1、..、n 的多列? 对于 iloc,我已将所需数据切片到我想要的范围内,即 30 个条目。而不是打开 4 个文件,只选择案例 3 的输出(即范围 4);我想使用相同的切片构建一个大型数据集并不断积累它。 对,我的问题是关于你想如何积累这些数据(即堆叠在一起,或并排放置)。听起来像前者 听起来像是重复的:***.com/questions/32444138/… 【参考方案1】:

看起来您正在尝试堆叠这些不同的情况,在这种情况下,您应该将它们附加到列表中,然后连接列表

df_list = []
for n in range(4): 
    script_dir = os.path.dirname(directory)
    rel_path = files[n]
    abs_file_path = os.path.join(script_dir, rel_path)
    to_open = pd.read_csv(abs_file_path, header=0)
    to_open["Geographic Address"] = to_open["Geographic Address"].astype(str)
    to_open["Geographic Address"] = to_open["Geographic Address"].map(lambda x: x[3:-1])
    to_open = to_open[to_open["Geographic Address"] == ld_up[n]]
    to_open.index = range(len(to_open))
    ind = np.searchsorted(to_open["Time"], time[n])
    ind = np.asscalar(np.array(ind))
    UpperBound = ind - 30
    data = to_open.iloc[UpperBound:ind,:]
    df_list.append(data)

df = pd.concat(df_list)

【讨论】:

感谢您的评论,快到了。 col_list 的输出为 120*160。这是我想从输出中看到的。但是,除了 df 中的第一种情况,所有其他输出都是 NaN,尽管我可以在 col_list 中正确查看它们。当我尝试连接它时,这对索引有影响吗?我的索引非常随机,不是从 1 开始 再次阅读您的编辑后,我已经在 Python 上进行了尝试,现在它工作得非常好!!!!非常感谢您的意见。因此,对于未来的工作,我将为我从中获得的所有输出创建一个空心列表,然后将其连接起来?非常感谢您的帮助!我很感激,因为我已经考虑了半天了。我是python新手 没问题。是的,这或多或少是您想要使用的策略,如果您多次重复相同的过程,每次重复都会生成一个小的数据框(或系列),然后您希望将所有这些子集组合在到一个大数据框。 如果您不关心子集的索引,您可以在调用pd.concat 时指定ignore_index。见:pandas.pydata.org/pandas-docs/stable/generated/…

以上是关于从 for 循环输出 Python 连接大数据帧的主要内容,如果未能解决你的问题,请参考以下文章

如何将创建多个字典的 for 循环的输出加入/合并到一个大字典中

从python中的for循环返回值

2022年最新Python大数据之Python基础

python 利用 for ... else 跳出双层嵌套循环

python 利用 for ... else 跳出双层嵌套循环

python 用for循环输入数字1-7判断输出相应星期几?