我有一个大约120列的空数据框,我想用文件中的数据填充它。你知道吗
我正在迭代一个大约有180万行的文件。 (这些行是非结构化的,我不能直接将它们加载到数据帧)
对于文件中的每一行,我执行以下操作:
df = df.append(df.iloc[-1])
结尾。副本很重要,前一行中的大部分数据不会更改。df.iloc[-1, df.columns.get_loc('column_name')] = some_extracted_value
这是非常缓慢的,我想错误是在附加。你知道吗
加快速度的正确方法是什么?预先分配数据帧?你知道吗
编辑:
在阅读了答案之后,我做了以下工作:
df = df.append(df.iloc[-1])
替换为:df.iloc[i] = df.iloc[i-1]
(i
是循环中的当前迭代)。你知道吗df.iloc[i] = df.iloc[i-1]
占用了大约95%的时间。你知道吗
在使用
append
的地方,最终会复制低效的数据帧。请再试一次,但不要说这句话:df = df.append(df.iloc[-1])
您可以这样做,将最后一行复制到新行(仅当最后一行包含新行中所需的信息时才执行此操作):
df.iloc[...calculate the next available index...] = df.iloc[-1]
然后像您所做的那样相应地编辑最后一行
df.iloc[-1, df.columns.get_loc('column_name')] = some_extracted_value
你可能需要足够的内存,无论你选择哪个选项。你知道吗
但是,您当然应该避免在循环中使用
pd.DataFrame.append
。这比list.append
贵。你知道吗相反,聚合到一个列表列表中,然后馈送到数据帧中。由于您没有提供示例,下面是一些伪代码:
最快的方法是直接通过pd.read\U csv文件() 尝试分离逻辑以清除非结构化到结构化数据,然后使用pd.read\U csv文件加载数据帧。你知道吗
您可以共享示例非结构化行和逻辑以取出结构化数据,这样就可以共享一些相同的见解。你知道吗
相关问题 更多 >
编程相关推荐