Pandas:清理充满NaN的数据帧

2024-05-16 20:05:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个分散在各处的NaNs的数据帧。我在Pandas文档(http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html)中读到,pd.dropna应该删除所有的NaN,但它对我的数据帧没有作用。在

以下是我的数据:

fish_frame:                         0       1       2         3  \
0                   735-8     NaN     NaN       NaN   
1                     NaN     NaN     NaN  LIVE WGT   
2                 GBE COD     NaN     NaN       600   
3                 GBW COD     NaN  11,189       NaN   
4                 GOM COD     NaN       0       NaN   
5                 POLLOCK     NaN     NaN     1,103   
6                   WHAKE     NaN     NaN        12   
7             GBE HADDOCK     NaN  10,730       NaN   
8             GBW HADDOCK     NaN  64,147       NaN   
9             GOM HADDOCK     NaN       0       NaN   
10                REDFISH     NaN     NaN         0   
11         WITCH FLOUNDER     NaN     370       NaN   
12                 PLAICE     NaN     NaN       622   
13     GB WINTER FLOUNDER  54,315     NaN       NaN   
14    GOM WINTER FLOUNDER     653     NaN       NaN   
15  SNEMA WINTER FLOUNDER  14,601     NaN       NaN   
16          GB YELLOWTAIL     NaN   1,663       NaN   
17       SNEMA YELLOWTAIL     NaN   1,370       NaN   
18       CCGOM YELLOWTAIL   1,812     NaN       NaN   

                            4   5      6   7  ASK           TRADE_DATE  \
0                         NaN NaN    NaN NaN    1  2013-05-15 10:09:00   
1                         NaN NaN  TOTAL NaN    1  2013-05-15 10:09:00   
2                         NaN NaN    NaN NaN    1  2013-05-15 10:09:00   
3                         NaN NaN    NaN NaN    1  2013-05-15 10:09:00   
4   Package Deal - $40,753.69 NaN   None NaN    1  2013-05-15 10:09:00   
5                         NaN NaN    NaN NaN    1  2013-05-15 10:09:00   
6                         NaN NaN    NaN NaN    1  2013-05-15 10:09:00   
7                         NaN NaN    NaN NaN    1  2013-05-15 10:09:00   
8                         NaN NaN    NaN NaN    1  2013-05-15 10:09:00   
9                         NaN NaN    NaN NaN    1  2013-05-15 10:09:00   
10                        NaN NaN    NaN NaN    1  2013-05-15 10:09:00   
11                        NaN NaN    NaN NaN    1  2013-05-15 10:09:00   
12                        NaN NaN    NaN NaN    1  2013-05-15 10:09:00   
13                        NaN NaN   None NaN    1  2013-05-15 10:09:00   
14                        NaN NaN   None NaN    1  2013-05-15 10:09:00   
15                        NaN NaN   None NaN    1  2013-05-15 10:09:00   
16                        NaN NaN    NaN NaN    1  2013-05-15 10:09:00   
17                        NaN NaN    NaN NaN    1  2013-05-15 10:09:00   
18                        NaN NaN   None NaN    1  2013-05-15 10:09:00

理想情况下,我希望看到所有的鱼类物种都在一列中排列,因为它们是这样的,并且它们相应的权重在它们旁边的一列中排列。{{cds}我想,如果不把cds}删除,我就不会这么做了。在

任何帮助都将不胜感激,谢谢。在

理想的打印输出如下所示:

^{pr2}$

Tags: 数据nonepandasnancodgbwinterdropna
1条回答
网友
1楼 · 发布于 2024-05-16 20:05:57

让我们举一个简单的例子。在

import pandas as pd
import numpy as np
np.random.seed(4)
A=np.random.rand(6,4)
A=np.where(A<.7, np.nan,A)
df = pd.DataFrame(A)
print(df)
# result:
#           0         1         2         3
# 0  0.967030       NaN  0.972684  0.714816
# 1       NaN       NaN  0.976274       NaN
# 2       NaN       NaN  0.779383       NaN
# 3  0.862993  0.983401       NaN       NaN
# 4       NaN       NaN       NaN  0.956653
# 5       NaN  0.948977  0.786306  0.866289

Dropna将删除所有信息,因为所有行至少包含一个NAN。dropna将删除至少包含一个NAN的所有行。在

根据您想对数据做什么,您将不得不对其进行子采样。在您的例子中,列1到7。就我而言,我会从1点到3点。在

^{pr2}$

对数据进行子采样后,可以选择要对数据执行的操作,例如,使用要执行以下操作的每行的最大值:

print(sub.max(axis=1))
# result:
# 0    0.972684
# 1    0.976274
# 2    0.779383
# 3    0.983401
# 4    0.956653
# 5    0.948977
# dtype: float64

您还可以使用其他方法,如min,或者,如果您希望自定义更复杂的方法,可以使用apply函数。在

def first_element(x):
    if x.first_valid_index() is None:
        return None
    else:
        return x[x.first_valid_index()]

sub2=sub.apply(first_element,axis=1)
print(sub2)
# result
# 0    0.972684
# 1    0.976274
# 2    0.779383
# 3    0.983401
# 4    0.956653
# 5    0.948977

对您来说,重要的是您希望如何处理相关列的信息。在

相关问题 更多 >