python - 在 Pandas 和/或 Tableau 中读取不同行大小的 CSV 文件

标签 python csv pandas tableau-api large-files

我有一个 csv 文件,我想用 Python 中的 Pandas 库来读取它。

在此表中,当我们遇到新项目(例如下面示例中的第 1393 或 1654 号项目)时,我们首先有 4 列行元数据,之后有 100 列行作为与该项目关联的真实数据。然后下一个项目又会发生这种情况,依此类推。

表格是这样的:

1,1393,0,0
1,1393,1,22,55,63,...
1,1393,5,32,43,163,...
.
.
.
2,1654,0,0
2,1654,8,95,96,142,...
2,1654,21,31,364,9,...
.
.
.

所以问题是:

  1. 某些行的大小与其他行不同
  2. 我们没有标题,因此无法创建标题,因为第一行有 4 个条目,第二行有 100 个条目
  3. 我的 CSV 文件很大(大约 10G)!

任何有助于我在 Pandas 或任何其他 Python 库中组织数据的建议都将受到高度赞赏。

PS:顺便说一句,有人知道如何在 Tableau 中管理它吗?

最佳答案

当数据不适合现有的 pandas 阅读器时,您可以创建自己的生成器并使用 from_records 填充数据帧。由于缺乏如何关联这些不同项目的详细信息,我编写了一个示例,仅将最新的元数据添加到每行的前面。

import pandas as pd

def my_data_generator(fp):
    metadata = []
    for line in fp:
        data = line.strip().split(',')
        if len(data) == 4:
            metadata = data
        elif not metadata:
            raise ValueError("csv file did not start with metadata")
        elif data:
            yield metadata + data

df = pd.DataFrame.from_records(my_data_generator(open('somefile.csv')))
print(df)

关于python - 在 Pandas 和/或 Tableau 中读取不同行大小的 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35687162/

相关文章:

python - 如何在 Python 中循环 GET 请求以从数据帧中的分页 API 接收所有数据

python - 将两个字典键值与 pandas 数据帧行匹配

php - 检查 MYSQL 中是否存在要插入或更新的记录

java - 使用 SuperCSV 解析器时出现问题

python - 使用python更改CSV文件中列的值

python - 比较两个或三个数据帧中的列值并合并

Python:pandas groupby ID,添加多列的值,直到满足中断条件

python - Xpath 中的空文本

Python数据框,删除特定记录之后的所有内容

python - 如何在 python 中获取原子钟时间?