【问题标题】:How can i parse an Excel column in special format pandas?如何解析特殊格式熊猫的 Excel 列?
【发布时间】:2020-12-18 11:26:06
【问题描述】:

我需要使用 pandas 从 Excel 文件中获取信息。例如我们有这个

    Time  Value1  Value2
0    10     30.5    21.6
1    11      11     50.2
2    13      13     13.33
3    15     101.1    2
4    23       5      5
5    4      11.1     10

我需要制作包含所有列但过滤列的 DataFrame。我需要将每两行的总和放在 DataFrame 中。最后,

    Time  Value1  Value2
0    21     41.5    71.8
1    28     114.1   15.33
2    27     16.1     15

尝试先读取所有文件然后更改它 - 不是解决方案。我需要制作一个带有过滤列的数据框。谢谢:*

【问题讨论】:

  • 为什么不阅读然后修改?
  • 我已经说过)))它不是一个解决方案
  • 没关系,您能解释一下有什么不便之处以便我们找到解决办法吗?
  • 哦,对不起。问题是我需要读取一个大文件(4 张 Excel,每张 8k 行和 600 列)并对两行中的每一行求和,以及如何将其全部保存在 DataFrame 中

标签: python pandas


【解决方案1】:

根据您的评论,要将四个不同大小的纸张读入单个 df,您首先必须

  • 确保所有工作表的列数和列名大致相同。如果名称不匹配,则将创建新列,使您的 df 呈指数级增长,但在许多单元格中使用 nans。

  • 一次加载和处理一张纸,这样您就可以在读取下一张纸之前处理掉内存中加载的原始数据。

您不应耗尽内存,因为读取 8k*600 表大约需要 40MB,但如果您遇到更大的数据集:

  • 如果您的内存仍然不足,请尝试转换为 np.float32,可能会影响一些 precision 和很多 performance,但会占用一半的内存。

  • 或者您可以处理一张纸并将其保存到二进制文件,例如parquet or hdf,然后再继续下一张。最终,如果您需要对完整数据集进行计算(并且该数据集对于内存来说太大),您可能需要研究核外算法,但那是另一回事了。

如果一切都适合记忆,那么你可以阅读

df = [] # list of dfs
for sht in list_with_sheetnames:
    buffer = pd.read_excel(pth+filename, sheet_name=sht)
    df.append(buffer.groupby(buffer.index // 2).sum())
    del buffer
df = pd.concat(df, ignore_index=True) # convert from list of dfs to single df

您可以创建一个每两行增加一次的分组器,然后对各行求和。

从excel中读取数据后:

df = df.groupby(df.index // 2).sum()

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 2015-01-21
    • 1970-01-01
    • 2014-08-21
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    相关资源
    最近更新 更多