我想从数据帧的第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]
答案 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_size
和storage
这两个字典的simple_dict
。在我对float64的测试中,DataFrame
的密度必须小于50%,才能具有降低NaN
的优势,大于50%甚至在内存和计算方面都是不利的时间。