python - 如何读取非常大的 CSV 中的一小部分行。 Pandas - 时间序列 - 大型数据集

标签 python pandas time-series bigdata

我在一个大文本文件中有一个时间序列。 该文件超过 4 GB。

因为它是一个时间序列,我只想阅读 1% 的行。

所需的极简示例:

df = pandas.read_csv('super_size_file.log',
                      load_line_percentage = 1)
print(df)

期望的输出:

>line_number, value
 0,           654564
 100,         54654654
 200,         54
 300,         46546
 ...

加载后我无法重新采样,因为首先加载它需要太多内存。

我可能想逐 block 加载并重新采样每个 block 。但对我来说似乎效率低下。

欢迎任何想法。 ;)

最佳答案

每当我必须处理一个非常大的文件时,我都会问“Dask 会做什么?”。

将大文件作为 dask.DataFrame 加载,将索引转换为列(由于完全索引控制不可用的解决方法),并在该新列上进行过滤。

import dask.dataframe as dd
import pandas as pd

nth_row = 100  # grab every nth row from the larger DataFrame
dask_df = dd.read_csv('super_size_file.log')  # assuming this file can be read by pd.read_csv
dask_df['df_index'] = dask_df.index
dask_df_smaller = dask_df[dask_df['df_index'] % nth_row == 0]

df_smaller = dask_df_smaller.compute()  # to execute the operations and return a pandas DataFrame

这将为您提供较大文件中的第 0、100、200 行等。如果您想将 DataFrame 缩减为特定列,请在调用计算之前执行此操作,即 dask_df_smaller = dask_df_smaller[['Signal_1', 'Signal_2']]。您还可以使用 scheduler='processes' 选项调用计算以使用 CPU 上的所有内核。

关于python - 如何读取非常大的 CSV 中的一小部分行。 Pandas - 时间序列 - 大型数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56275492/

相关文章:

r - 将函数应用于时间序列

python - 识别 pandas 中具有稀疏 nan 的时间序列中的数据组

python - pyautogui GIMP 自动化问题

python - 我们如何将整列的内容拆分为同一个表中的单独列?

python - 将函数应用于 pandas 中分组数据的单列

python - 如何对 pandas.Series 列进行二进制分解

python - 解析文本文件而不拆分多单词名称

python - 匹配列表中的任何关键字是否存在于字符串中

python - 读取文件内容的类

r - 使用 R 从具有可见中断的大系列中提取迷你系列(绘制时)