我有一个大文件,导入到Pandas的单个数据框中。 我使用pandas按照数据框中的行数将文件拆分成多个段。
例如:10行: 文件1得[0:4] 文件2获得[5:9]
有没有办法在不必创建更多数据帧的情况下执行此操作?
答案 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编写器,然后我们关闭所有文件。
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()
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的参数将起到作用。