如何动态地从数据帧中选取数据?

时间:2019-07-12 15:19:14

标签: python-3.x pandas

我想从数据帧的第6行中选择数据,但列的数量有所不同。

我已经拥有的东西:

df = pd.DataFrame(df_csv)
     val0 = df.iloc[6:, 0]
     val1 = df.iloc[6:, 1]
     val2 = df.iloc[6:, 2]
     val3 = df.iloc[6:, 3]
     val4 = df.iloc[6:, 4]

我想要的是它甚至应该动态存储。

 df = pd.DataFrame(df_csv)
 for i in df:
    val[i] = df.iloc[6:, i]

1 个答案:

答案 0 :(得分:0)

最简单的解决方案将是已经提到的:

df = df_csv[6:]
simple_dict = dict(df)

这会将每一列存储为dict中的pandas.Series。 但是,由于pandas.Series将不存在的值存储为NaN,我们将其删除:

storage = {}
for column_name, column_values in df.iteritems():
    series = column_values.dropna()
    storage[column_name] = series

检查内存消耗:

由于python解释器仅将对象引用到字典,因此我们必须总结所有引用对象的大小:

memory_size = storage.__sizeof__()
for key in storage:
    memory_size += storage[key].__sizeof__()

__sizeof__()方法的输出并不总是可信赖的,因此另一种检查方法是使用pickle模块序列化对象。在这种情况下,这似乎非常合适。

  

现在您可以比较memory_sizestorage这两个字典的simple_dict。在我对float64的测试中,DataFrame的密度必须小于50%,才能具有降低NaN的优势,大于50%甚至在内存和计算方面都是不利的时间。