Pandas从数据帧中删除所有的NaN

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

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

我有一个分散在其中的NaNs的数据帧,我想把它们全部删除,这样我就只剩下我的数据了。在

以下是我的数据框fish_frame的打印输出:

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      6        package_deal_column Package_Price  
0                         NaN    NaN  Package Deal - $40,753.69           nan  
1                         NaN  TOTAL  Package Deal - $40,753.69           nan  
2                         NaN    NaN  Package Deal - $40,753.69          None  
3                         NaN    NaN  Package Deal - $40,753.69          None  
4   Package Deal - $40,753.69   None  Package Deal - $40,753.69          None  
5                         NaN    NaN  Package Deal - $40,753.69          None  
6                         NaN    NaN  Package Deal - $40,753.69          None  
7                         NaN    NaN  Package Deal - $40,753.69          None  
8                         NaN    NaN  Package Deal - $40,753.69          None  
9                         NaN    NaN  Package Deal - $40,753.69          None  
10                        NaN    NaN  Package Deal - $40,753.69          None  
11                        NaN    NaN  Package Deal - $40,753.69          None  
12                        NaN    NaN  Package Deal - $40,753.69          None  
13                        NaN   None  Package Deal - $40,753.69          None  
14                        NaN   None  Package Deal - $40,753.69          None  
15                        NaN   None  Package Deal - $40,753.69          None  
16                        NaN    NaN  Package Deal - $40,753.69          None  
17                        NaN    NaN  Package Deal - $40,753.69          None  
18                        NaN   None  Package Deal - $40,753.69          None

理想情况下,对于第2列、第3列和第4列,我希望没有NaNs,并且所有的数字都在一列而不是三列中。在

我使用了命令fish_frame = fish_frame.dropna(axis=1, how='all'),但它根本没有改变数据帧。在

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


Tags: 数据nonepackagenanframecodfishnans
3条回答

你需要使用这个:

df = pd.read_csv('fish.csv',header = None)

df_new = df.convert_objects(convert_numeric=True)

df_new = df_new.fillna(value=0)

这将用0替换所有的NaN和字符串。在

然后,您可以添加3列,得到1列,其中包含您所说的所有数字。在

^{pr2}$

这种方法只适用于您的情况,因为在同一列的同一行中没有值。在

fish_frame.dropna(axis=1, how='any') 

将删除至少具有一个NaN的任何列。在

做加法可以是

 df['TotalVal'] = df[[0,1,2]].fillna(0).T.sum()

或者

^{pr2}$

不过。。。根据您的问题,以及数据“怪异”的特殊方式,我可能建议您在进入pandas之前进行清理,我认为,使用csv模块创建一组元组,然后从那里构建数据帧,这样做会容易得多。在

我不是专家,我花了一段时间来思考pandas的模式,但你必须从功能上思考(考虑结果,而不是过程)和数据的形状。在

在本例中,我们需要一个与原始数据帧具有相同索引的序列。因此,首先,提取感兴趣的列。因为我们没有命名索引,为了确保对齐,我们不想删除或添加任何数据。我使用fillna只是将nan替换为一个有效值,这个值对于我选择的算法来说是不可操作的。在

这给了我一个有3列和我的原始索引的修改过的数据帧。大多数pandas函数作用于,但我们需要的是每个的和。因此,T将数据帧转置,使每个都是具有3个数据样本的fish,而每个都是具有3个数据行的fish。(您也可以告诉它在axis=1上求和,这个描述与我理解的相反,但是axis=1意味着“sum over columns”=每行)

然后我们对它们求和,这将对每个列求和,因为这只是一个数据点,所以也会将它们缩回到单个序列中。这就是我们想要的,我们可以把它放到数据帧中。在

相关问题 更多 >