我添加了两个不同的csv列来制作二维历史图。我有两种不同类型的数据,分别是dense
和collision
。
此外,每个数据都包括我的案例研究的信息,其中type
列有type=0
(大)和type=1
(小)。csv看起来像这样(来自碰撞):
TIMESTEP id type a |f| |v|
20000 4737 0 9.81 1.31495 4.18007
40000 11991 1 9.81 4.43794 4.17909
50000 15725 1 9.81 4.43794 4.17810
30000 8209 0 9.81 4.43794 4.17810
15000 3545 0 9.81 1.31495 4.17810
30000 8269 0 9.81 4.43794 4.17810
10000 2077 1 9.81 1.31495 4.17712
20000 5079 0 9.81 1.31495 4.17712
所有数据都是float
类型,具有正条目。
当我分别绘制type=0
(大)和type=1
(小)两种类型的a
和|f|
时,我没有遇到任何问题。而且绘图也是有意义的。但是,从small + big
(即每个部分的每个条目的总和)绘制a
和|f|
看起来很奇怪。
我意识到small + big
给了我几乎90%
南,虽然原始数据没有任何Nan
。
如何在进行small + big
时避免Nan
,以制作完美的历史图?
我意识到数据在collision:Small+Big
中丢失。我希望有像Dense:Small+Big
这样的图。
我的代码如下:
from cProfile import label
from matplotlib.colors import LogNorm
df_collision_big = df_collision[df_collision['type'] == 0]
df_collision_small = df_collision[df_collision['type'] == 1]
df_dense_big = df_dense[df_dense['type'] == 0]
df_dense_small = df_dense[df_dense['type'] == 1]
plt.subplots(figsize=(14, 6))
#make space between subplots
plt.subplots_adjust(wspace=0.5, hspace=0.6)
plt.subplot(231)
plt.hist2d(df_collision_small['a'], df_collision_small['|f|'], bins=np.linspace(0,70,15), norm=LogNorm())
plt.colorbar()
plt.xlabel('a')
plt.ylabel('|f|')
plt.title('Collision: Small')
plt.subplot(232)
plt.hist2d(df_collision_big['a'], df_collision_big['|f|'], bins=np.linspace(0,70,15), norm=LogNorm())
plt.colorbar()
plt.xlabel('a')
plt.ylabel('|f|')
plt.title('Collision: Big')
plt.subplot(233)
plt.hist2d(df_collision_big['a'] + df_collision_small['a'], df_collision_big['|f|'] + df_collision_small['|f|'], bins=np.linspace(0,70,15), norm=LogNorm())
plt.colorbar()
plt.xlabel('a')
plt.ylabel('|f|')
plt.title('Collision: Small + Big')
plt.subplot(234)
plt.hist2d(df_dense_small['a'], df_dense_small['|f|'], bins=np.linspace(0,70,15), norm=LogNorm())
plt.colorbar()
plt.xlabel('a')
plt.ylabel('|f|')
plt.title('Dense: Small')
plt.subplot(235)
plt.hist2d(df_dense_big['a'], df_dense_big['|f|'], bins=np.linspace(0,70,15), norm=LogNorm())
plt.colorbar()
plt.xlabel('a')
plt.ylabel('|f|')
plt.title('Dense: Big')
plt.subplot(236)
plt.hist2d(df_dense_big['a'] + df_dense_small['a'], df_dense_big['|f|'] + df_dense_small['|f|'], bins=np.linspace(0,70,15), norm=LogNorm())
plt.colorbar()
plt.xlabel('a')
plt.ylabel('|f|')
plt.title('Dense: Big + Small')
plt.savefig('hist2d.png', dpi=300)
plt.show()
打印df_collision['a]
会得到以下结果:
175761 9.810009
409899 9.810058
429591 9.810058
358086 9.810009
89079 9.810009
...
243866 9.810058
125778 9.810009
185374 9.810009
496586 9.810058
234942 9.810058
Name: a, Length: 27832, dtype: float64
a
中的大多数值都是相似的。
打印df_collision_big['a'] + df_collision_small['a']
会得到以下结果:
0 19.620067
1 19.620067
2 19.620067
3 19.620067
4 19.620067
...
504208 NaN
504209 NaN
504210 NaN
504211 NaN
504212 NaN
Name: a, Length: 18639, dtype: float64
还有一件事:
打印镜头的大小给我这个:
print(len(df_collision_small['a']))
print(len(df_collision_big['a']))
# Output
13772
14060
希望能有一些建议来解决这个问题。
- 谢谢-谢谢
1条答案
按热度按时间ukdjmx9f1#
您可以将
NaN
问题归结为:说明
索引上的
outer join
导致来自两个 Dataframe 的“a”放在一起(索引/位置方式)的 Dataframe :sum(axis=1)
在对以下值求和时忽略NaN
: