pandas:将数据帧拆分为多个csv

时间:2017-11-21 20:13:10

标签: python-3.x pandas

我有一个大文件,导入到Pandas的单个数据框中。 我使用pandas按照数据框中的行数将文件拆分成多个段。

例如:10行: 文件1得[0:4] 文件2获得[5:9]

有没有办法在不必创建更多数据帧的情况下执行此操作?

3 个答案:

答案 0 :(得分:1)

assign这里有一个新列g,你只需要在每个groupby中指定你想要多少项,这里我使用的是3.

df.assign(g=df.index//3)
Out[324]: 
    0  g
0   1  0
1   2  0
2   3  0
3   4  1
4   5  1
5   6  1
6   7  2
7   8  2
8   9  2
9  10  3

您可以致电df[df.g==1]获取所需内容

答案 1 :(得分:0)

有两种方法可以做到这一点。我相信你正在寻找前者。基本上,我们打开一系列csv编写器,然后通过使用索引的一些基本数学写入正确的csv编写器,然后我们关闭所有文件。

单个DataFrame均分为N个CSV文件

import pandas as pd
import csv, math

df = pd.DataFrame([1,2,3,4,5,6,7,8,9,10]) # uncreative input values for 10 columns
NUMBER_OF_SPLITS = 2
fileOpens = [open(f"out{i}.csv","w") for i in range(NUMBER_OF_SPLITS)]
fileWriters = [csv.writer(v, lineterminator='\n') for v in fileOpens]
for i,row in df.iterrows():
    fileWriters[math.floor((i/df.shape[0])*NUMBER_OF_SPLITS)].writerow(row.tolist())
for file in fileOpens:
    file.close()

多个DataFrame均匀分为N个CSV文件

import pandas as pd
import numpy as np

df = pd.DataFrame([1,2,3,4,5,6,7,8,9,10]) # uncreative input values for 10 columns
NUMBER_OF_SPLITS = 2
for i, new_df in enumerate(np.array_split(df,NUMBER_OF_SPLITS)):
    with open(f"out{i}.csv","w") as fo:
            fo.write(new_df.to_csv())

答案 2 :(得分:0)

迭代iloc的参数将起到作用。