Pandas - 从数据框中删除每个NaN

时间:2017-07-24 14:55:34

标签: python pandas dataframe

我有一个数据框,NaN分散在其中,并希望将它们全部删除,所以我只剩下我的数据。

以下是我的数据框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列,我希望没有NaN s,并且所有数字都在一列而不是三列。

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

感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

你需要使用它:

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列。

df_total = df_new[1] + df_new[2] + df_new[3]

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

答案 2 :(得分:0)

执行添加可能类似于

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

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

虽然...根据您的问题,以及数据的特殊方式,但我可能会建议您在进入大熊猫之前进行清洁 - 它我认为,使用csv模块创建一组元组并从那里构建数据框会更容易。

我不是专家,我花了一段时间来围绕熊猫范例,但你必须在功能上思考(思考结果,而不是过程)并考虑数据的形状。

在这种情况下,我们想要一个与原始数据帧具有相同索引的单个系列。首先,提取感兴趣的列。由于我们没有命名索引,为了确保对齐,我们不想删除或添加任何数据。我使用fillna只是用一个有效值替换NaNs,这个值对我选择的算法来说是无操作。

这为我提供了一个包含3列和原始索引的修改后的数据框。大多数pandas函数作用于,但我们想要的是每个的总和。所以T转置数据帧,使得每个不是每个是3条数据样本,每个是一条有3个数据行的鱼。 (你也可以告诉它总结轴= 1,其中的描述是从我的理解中反过来的,但是轴= 1表示对列进行求和' =每行)

然后我们总结它们,它们将对每一列进行求和,因为它只是一个数据点,所以也将它们折叠回一个系列。这就是我们想要的,我们可以在那时将它放在数据框中。