【问题标题】:Split csv into small csv using python使用python将csv拆分为小csv
【发布时间】:2018-08-16 11:24:45
【问题描述】:

我有一个csv(大小约为 750MB)。我必须将它拆分成小的 csv 每个大小不超过 30Mb。

c1,c2,c3,c4
1,a,1,4
2,a,1,4
3,b,1,4
4,b,1,4
5,b,1,4
6,c,1,4

限制是你不能在不同的文件中拥有相同的c2。 (例如,一个文件中不能有一半 b 另一个文件中的另一半) 如果 C2 的一个值本身超过 30Mb,则将与该 c2 关联的数据打印到文件中

我用 pandas 来做同样的事情;我的代码

max_size = 30 * 1000000
df = pd.read_csv("data.csv", low_memory=False)
unique_ac_id = pd.unique(df.C2)

counter = 1
df_arr = []
total_size = 0

for ac_id in unique_ac_id:
    df_cur = df[df.C2 == ac_id]
    size = df_cur.memory_usage(index=False, deep=True).sum()
    if size > max_size:
        print(f'{ac_id} size is more than max size allowded')

    if total_size > max_size:
        pd.concat(df_arr).to_csv(f'out/splitter_{counter}.csv', index=False)
        counter += 1
        df_arr.clear()
        total_size = 0

    df_arr.append(df_cur)
    total_size += size

if len(df_arr) > 0:
    pd.concat(df_arr).to_csv(f'out/splitter_{counter}.csv', index=False)

有没有更好的方法来做同样的事情?

【问题讨论】:

  • 约束不可行。如果你的 c2 有一半是 a 怎么办?那样你就不能浓缩了。
  • 可以将所有这些拉到一个文件中。在这种情况下,不需要考虑 30Mb。在我的数据中,这种情况很少发生。

标签: python python-3.x pandas csv


【解决方案1】:

您可以轻松地将 CSV 拆分为大小相等的块。

import pandas as pd
for i,chunk in enumerate(pd.read_csv('C:/your_path_here/main.csv', chunksize=100)):
    chunk.to_csv('chunk{}.csv'.format(i))

【讨论】:

    【解决方案2】:

    我猜你可以使用csv...?

    语法非常简单:

    >>> import csv
    >>> with open('eggs.csv', 'rb') as csvfile:
    ...     spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
    ...     for row in spamreader:
    ...         print ', '.join(row)
    Spam, Spam, Spam, Spam, Spam, Baked Beans
    Spam, Lovely Spam, Wonderful Spam
    

    使用这种方法,我一次只读取 30MB,然后将读取的内容输出到另一个 csv。鉴于您在row 中有矢量内容,您将能够确定每行大小,并确定有多少行大约为 30MB,因此希望这可以帮助您入门。

    另外,考虑到c2 的限制,您最终可能会打开多个 csv,以便每个 csv 都包含其各自的 c2 分组。每行都是一个向量,因此在您给出的示例中,这似乎是第二个元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 2018-03-30
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 2016-04-15
      相关资源
      最近更新 更多