创建零填充的pandas数据框

nie*_*akh 80 python dataframe pandas

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

我用过:

zero_data = np.zeros(shape=(len(data),len(feature_list)))
d = pd.DataFrame(zero_data, columns=feature_list)
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

Shr*_*van 107

你可以试试这个:

d = pd.DataFrame(0, index=np.arange(len(data)), columns=feature_list)
Run Code Online (Sandbox Code Playgroud)

  • 测试这个我发现`%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。我很惊讶它并没有更快。 (2认同)
  • 请注意,如果在将`d`初始化为包含0后执行`d.set_value(params)`之类的操作,则可能会遇到in / float问题。一个简单的解决方法是:d = pd.DataFrame(0.0,index = np.arange(len(data)),columns = feature_list)。 (2认同)

Ale*_*exG 23

在我看来,最好用numpy做到这一点

import numpy as np
import pandas as pd
d = pd.DataFrame(np.zeros((N_rows, N_cols)))
Run Code Online (Sandbox Code Playgroud)


cha*_*Rak 13

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

df_zeros = df * 0
Run Code Online (Sandbox Code Playgroud)

如果现有数据框包含 NaN 或非数字值,您可以改为将函数应用于每个只返回 0 的单元格:

df_zeros = df.applymap(lambda x: 0)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,只要 df 包含 NaN,您就会得到 NaN 而不是零。 (3认同)

小智 8

与@Shravan类似,但没有使用numpy:

  height = 10
  width = 20
  df_0 = pd.DataFrame(0, index=range(height), columns=range(width))
Run Code Online (Sandbox Code Playgroud)

然后你可以用它做任何你想做的事:

post_instantiation_fcn = lambda x: str(x)
df_ready_for_whatever = df_0.applymap(post_instantiation_fcn)
Run Code Online (Sandbox Code Playgroud)