我有一个大的数据帧(> 3MM行),我试图通过一个函数(下面的一个很大程度上简化),我不断收到一条Memory Error消息.
我想我将太大的数据帧传递给函数,所以我试图:
1)将数据帧切成较小的块(最好是切片AcctName)
2)将数据帧传递给函数
3)将数据帧连接回一个大型数据帧
def trans_times_2(df):
df['Double_Transaction'] = df['Transaction'] * 2
large_df
AcctName Timestamp Transaction
ABC 12/1 12.12
ABC 12/2 20.89
ABC 12/3 51.93
DEF 12/2 13.12
DEF 12/8 9.93
DEF 12/9 92.09
GHI 12/1 14.33
GHI 12/6 21.99
GHI 12/12 98.81
Run Code Online (Sandbox Code Playgroud)
我知道我的功能正常,因为它可以在较小的数据帧(例如40,000行)上工作.我尝试了以下方法,但是我将小数据帧连接回一个大型数据帧是不成功的.
def split_df(df):
new_df = []
AcctNames = df.AcctName.unique()
DataFrameDict = {elem: pd.DataFrame for elem in AcctNames}
key_list = [k for k in DataFrameDict.keys()]
new_df = []
for key in …Run Code Online (Sandbox Code Playgroud) 我有一个带有500,000行的数据帧"DF".以下是每列的数据类型:
ID int64
time datetime64[ns]
data object
Run Code Online (Sandbox Code Playgroud)
"data"列中的每个条目都是一个size = [5,500]的数组
当我尝试使用保存此数据帧时
DF.to_pickle("my_filename.pkl")
Run Code Online (Sandbox Code Playgroud)
它给我返回了以下错误:
12 """
13 with open(path, 'wb') as f:
---> 14 pkl.dump(obj, f, protocol=pkl.HIGHEST_PROTOCOL)
OSError: [Errno 22] Invalid argument
Run Code Online (Sandbox Code Playgroud)
我也尝试这种方法,但我得到同样的错误:
import pickle
with open('my_filename.pkl', 'wb') as f:
pickle.dump(DF, f)
Run Code Online (Sandbox Code Playgroud)
我尝试保存此数据帧的10行:
DF.head(10).to_pickle('test_save.pkl')
Run Code Online (Sandbox Code Playgroud)
而且我没有任何错误.因此,它可以节省小DF而不是大DF.
我在Mac上使用python 3,ipython notebook 3.
请帮我解决这个问题.我真的需要将这个DF保存到pickle文件中.我无法在互联网上找到解决方案.
我有一组大数据文件(1M行x 20列).但是,我只对5个左右的数据列感兴趣.
我想我可以通过仅使用感兴趣的列创建这些文件的副本来使我更容易,所以我有较小的文件可用于后期处理.
我的计划是将文件读入数据帧,然后写入csv文件.
我一直在研究将大块的数据文件读入数据帧.
但是,我还没有找到任何关于如何将数据写入块中的csv文件的内容.
这是我现在正在尝试的,但这不附加csv文件:
with open(os.path.join(folder, filename), 'r') as src:
df = pd.read_csv(src, sep='\t',skiprows=(0,1,2),header=(0), chunksize=1000)
for chunk in df:
chunk.to_csv(os.path.join(folder, new_folder,
"new_file_" + filename),
columns = [['TIME','STUFF']])
Run Code Online (Sandbox Code Playgroud) 我在将 DataFrame 随机分成df较小的DataFrames.
df
movie_id 1 2 4 5 6 7 8 9 10 11 12 borda
0 1 5 4 0 4 4 0 0 0 4 0 0 21
1 2 3 0 0 3 0 0 0 0 0 0 0 6
2 3 4 0 0 0 0 0 0 0 0 0 0 4
3 4 3 0 0 0 0 5 0 0 4 0 5 17
4 5 3 …Run Code Online (Sandbox Code Playgroud) 将非常大的数据帧(50GB)拆分为多个输出(水平)的最佳/最简单的方法是什么?
我想过做这样的事情:
stepsize = int(1e8)
for id, i in enumerate(range(0,df.size,stepsize)):
start = i
end = i + stepsize-1 #neglect last row ...
df.ix[start:end].to_csv('/data/bs_'+str(id)+'.csv.out')
Run Code Online (Sandbox Code Playgroud)
但我敢打赌有更聪明的解决方案吗?
我想将 Pandas DataFrame 划分为十个不相交、大小相同、随机组成的子集。
我知道我可以使用以下方法随机采样原始 Pandas DataFrame 的十分之一:
partition_1 = pandas.DataFrame.sample(frac=(1/10))
Run Code Online (Sandbox Code Playgroud)
但是,我如何获得其他九个分区?如果我再做pandas.DataFrame.sample(frac=(1/10))一次,我的子集可能不会不相交。
谢谢您的帮助!
下面是一个示例数据帧。
0 1 2 3 4
0 0.0 13.00 4.50 30.0 0.0,13.0
1 0.0 13.00 4.75 30.0 0.0,13.0
2 0.0 13.00 5.00 30.0 0.0,13.0
3 0.0 13.00 5.25 30.0 0.0,13.0
4 0.0 13.00 5.50 30.0 0.0,13.0
5 0.0 13.00 5.75 0.0 0.0,13.0
6 0.0 13.00 6.00 30.0 0.0,13.0
7 1.0 13.25 0.00 30.0 0.0,13.25
8 1.0 13.25 0.25 0.0 0.0,13.25
9 1.0 13.25 0.50 30.0 0.0,13.25
10 1.0 13.25 0.75 30.0 0.0,13.25
11 2.0 13.25 1.00 30.0 0.0,13.25
12 2.0 …Run Code Online (Sandbox Code Playgroud) 我有一个大约500,000行的excel文件,我想将它拆分为几个excel文件,每个文件有50,000行.
我想用熊猫这样做,所以它将是最快捷,最简单的.
任何想法如何制作它?
谢谢您的帮助
pandas ×8
python ×8
dataframe ×5
python-3.x ×2
excel ×1
jupyter ×1
large-data ×1
numpy ×1
partitioning ×1
pickle ×1
python-2.7 ×1
slice ×1