作为一个例子,想象一下下面有一个csv
id | a1 | a2 |....| aN | b1 | b2 |....| bM |
___________________________________________
0 |data|data|....|data|None|None|....|None|
1 |data|data|....|data|None|None|....|None|
2 |data|data|....|data|None|None|....|None|
3 |None|None|....|None|data|data|....|data|
4 |None|None|....|None|data|data|....|data|
....
我有N a
列和M b
列,并且a
列和b
列是互斥的,即如果在a
中有data
,那么在b
中就没有任何东西了。data
在这种情况下主要是字符串或浮点值。
感觉效率很低,我将有M或N个元素,为每一行不包含任何东西。
我可以把上面的数据分成两个不同的 Dataframe ,即
df_a
id | a1 | a2 |....| aN |
________________________
0 |data|data|....|data|
1 |data|data|....|data|
2 |data|data|....|data|
df_b
id | b1 | b2 |....| bM |
________________________
3 |data|data|....|data|
4 |data|data|....|data|
但是我有两个数据框架需要跟踪,而不是一个数据框架。
在不创建臃肿的 Dataframe 的情况下,将数据保持在一起的最有效的方法是什么?如果我也有c
和d
列,解决方案是否有效?
我可以做的一件事是将csv制作成excel工作表,并将b列放在不同的工作表中。但对我来说还是有点笨重。
3条答案
按热度按时间hfsqlsce1#
一个可能的解决方案是使用
Sparse data structures
(它不存储None
值):输出:
xfb7svmp2#
@kkawabat,怎么样,首先分离a,b然后分配两个 Dataframe ,一个新的行称为,'TYPE',为df填充TYPE与'a'和TYPE 'b'为其他,然后合并两个 Dataframe ,在这种情况下,你不需要使df列如a1,a2,b1,b2,你可以只做col 1,col 2,.......或者u也可以将TYPE设置为布尔值,并将True称为a,False称为b。
daupos2t3#
这是一个有点古怪,但我最终做的是:
创建一个新的dataframe,列为
id
,type
,value_dict
,其中type是a
或b
,value_dict
的值是一个字典,其中的键是所有的列名称和值。比如说将是:
我用字典作为元素有点奇怪,但这似乎是我能想到的最直观的解决方案。