Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建零填充数据帧_Python_Pandas_Dataframe - Fatal编程技术网

Python 创建零填充数据帧

Python 创建零填充数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,创建给定大小的零填充数据帧的最佳方法是什么 我使用了: zero_data = np.zeros(shape=(len(data),len(feature_list))) d = pd.DataFrame(zero_data, columns=feature_list) 有更好的方法吗?您可以尝试以下方法: d = pd.DataFrame(0, index=np.arange(len(data)), columns=feature_list) 如果您已经有了数据帧,这是最快的方法: In

创建给定大小的零填充数据帧的最佳方法是什么

我使用了:

zero_data = np.zeros(shape=(len(data),len(feature_list)))
d = pd.DataFrame(zero_data, columns=feature_list)
有更好的方法吗?

您可以尝试以下方法:

d = pd.DataFrame(0, index=np.arange(len(data)), columns=feature_list)

如果您已经有了数据帧,这是最快的方法:

In [1]: columns = ["col{}".format(i) for i in range(10)]
In [2]: orig_df = pd.DataFrame(np.ones((10, 10)), columns=columns)
In [3]: %timeit d = pd.DataFrame(np.zeros_like(orig_df), index=orig_df.index, columns=orig_df.columns)
10000 loops, best of 3: 60.2 µs per loop
与之相比:

In [4]: %timeit d = pd.DataFrame(0, index = np.arange(10), columns=columns)
10000 loops, best of 3: 110 µs per loop

In [5]: temp = np.zeros((10, 10))
In [6]: %timeit d = pd.DataFrame(temp, columns=columns)
10000 loops, best of 3: 95.7 µs per loop

假设有一个模板DataFrame,在这里填充零值时要复制哪个模板

如果数据集中没有NAN,则乘以零的速度会显著加快:

In [19]: columns = ["col{}".format(i) for i in xrange(3000)]                                                                                       

In [20]: indices = xrange(2000)

In [21]: orig_df = pd.DataFrame(42.0, index=indices, columns=columns)

In [22]: %timeit d = pd.DataFrame(np.zeros_like(orig_df), index=orig_df.index, columns=orig_df.columns)
100 loops, best of 3: 12.6 ms per loop

In [23]: %timeit d = orig_df * 0.0
100 loops, best of 3: 7.17 ms per loop
改进取决于数据帧的大小,但从未发现它会变慢

只是为了好玩:

In [24]: %timeit d = orig_df * 0.0 + 1.0
100 loops, best of 3: 13.6 ms per loop

In [25]: %timeit d = pd.eval('orig_df * 0.0 + 1.0')
100 loops, best of 3: 8.36 ms per loop
但是:

编辑

假设您有一个使用float64的帧,这将是最快的一个巨大的差距!它还可以通过将0.0替换为所需的填充编号来生成任何值

In [23]: %timeit d = pd.eval('orig_df > 1.7976931348623157e+308 + 0.0')
100 loops, best of 3: 3.68 ms per loop
根据口味,可以从外部定义nan,并执行一般解决方案,而不考虑特定的浮动类型:

In [39]: nan = np.nan
In [40]: %timeit d = pd.eval('orig_df > nan + 0.0')
100 loops, best of 3: 4.39 ms per loop

在我看来,最好用numpy来做这件事

import numpy as np
import pandas as pd
d = pd.DataFrame(np.zeros((N_rows, N_cols)))

与@Shravan类似,但不使用numpy:

  height = 10
  width = 20
  df_0 = pd.DataFrame(0, index=range(height), columns=range(width))
然后你可以用它做任何你想做的事:

post_instantiation_fcn = lambda x: str(x)
df_ready_for_whatever = df_0.applymap(post_instantiation_fcn)

如果希望新数据帧具有与现有数据帧相同的索引和列,可以将现有数据帧乘以零:

df_zeros = df * 0

不,我想不出有什么实质性的改进。我在np.zero上得到了一个内存错误,因为数据集很大。关于我能做什么有什么提示吗?除了“MemoryError”,我没有其他输出。我有100GB的RAM,数据只有20GB,但仍然失败。不知道如何调试它,64位ubuntu服务器。我在谷歌上搜索了一段时间,但每个人都说-划分成块,但这些数据不能被划分。你能不能只处理
数据
?为什么需要创建另一个结构来保存它呢?通过测试,我发现
%timeit temp=np.zeros((10,11));d=pd.DataFrame(temp,columns=['col1','col2',…'col11'])
需要156个us。但是
%timeit d=pd.DataFrame(0,index=np.arange(10),columns=['col1','col2',…'col11'])
需要171个us。我很惊讶它没有更快。请注意,如果在初始化
d
以包含0之后执行类似
d.set_值(params)
的操作,可能会遇到int/float问题。一个简单的解决方法是:
d=pd.DataFrame(0.0,index=np.arange(len(data)),columns=feature\u list)
。这无疑是关于计时的最全面的答案,尽管对于OP来说,似乎内存需求是问题,而不是速度。。。顺便说一句,在我的系统中,您编写的前两个建议给出了相同的时间(0.20.3),因此可能有一些更改。当我这样做时,我无法更改“0”值
TypeError:'numpy.float64'对象不支持项分配
@RightmireM您到底要如何更改它们?您是正确的,数据类型是np。float64请注意,如果df包含nan,您将得到nan而不是零。
df_zeros = df * 0