Python 熊猫-从数据帧中删除每个NaN

Python 熊猫-从数据帧中删除每个NaN,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,其中散落着NAN,我想把它们全部删除,所以我只剩下我的数据了 这是我的dataframe fish_frame的打印输出: 理想情况下,对于第2列、第3列和第4列,我希望没有NaN,并且数字都在一列而不是三列中 我使用命令fish\u frame=fish\u frame.dropnaaxis=1,how='all',但它根本没有改变数据帧 任何帮助都将不胜感激 fish_frame.dropna(axis=1, how='any') 将删除至少有一个NaN的所有列。您需要使

我有一个数据框,其中散落着NAN,我想把它们全部删除,所以我只剩下我的数据了

这是我的dataframe fish_frame的打印输出:

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

我使用命令fish\u frame=fish\u frame.dropnaaxis=1,how='all',但它根本没有改变数据帧

任何帮助都将不胜感激

fish_frame.dropna(axis=1, how='any') 
将删除至少有一个NaN的所有列。

您需要使用以下选项:

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]

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

执行添加可能类似于

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

虽然。。。基于您的问题,以及数据“怪异”的特殊方式,我可能会建议您在进入pandas之前进行清理-我认为使用csv模块创建一组元组并从中构建数据框架会容易得多

我不是一个专家,我花了一段时间来思考熊猫模式,但是你必须从功能上思考结果,而不是处理和考虑数据的形状。p> 在本例中,我们需要一个与原始数据帧具有相同索引的单个系列。首先,提取感兴趣的列。由于我们没有命名索引,为了确保对齐,我们不想删除或添加任何数据。我使用fillna只是为了用一个有效值替换NAN,该值对于我选择的算法来说是不可操作的

这给了我一个修改过的数据框架,有3列和我的原始索引。大多数函数作用于列,但我们需要的是每行的总和。因此T转换数据帧,使每一行不是具有3个数据样本的fish,而是具有3个数据行的fish。您也可以告诉它求和于axis=1,这与我的理解相反,但是axis=1表示“求和于列”=每行


然后我们对它们求和,这将对每列求和,因为这只是一个数据点,也将它们折叠成一个序列。这就是我们想要的,我们可以将它放在数据框中。

你能上传文件吗?就像我从什么原始来源获得这些数据一样?是的,或者只上传csv/excel文件。这是一个嵌入在电子邮件正文中的HTML表。我应该上传整个HTML代码吗?不,没关系。我将使用其他my data发布一个示例,但这会删除整个列,包括所有有价值的数据吗?@当然是浏览者。你不想要NaN。有些东西需要存在,要么是NaN,要么是数字。如果你想保留你的数据,不要删除NaN,而是用0s或其他东西替换它,这是一个足够简单的任务吗?我想我会使用诸如concatenate等命令?是的。这可能行得通。然后您可以使用:df_total=df_new[1]+df_new[2]+df_new[3]来添加并仅获取一列。但是,只有在您发布的示例中的同一行中没有2个值用于相同的列时,此操作才有效。返回的TypeError:在添加数据帧索引行上的+:“int”和“str”的操作数类型不受支持。@抱歉,我错过了数据中的字符串。我编辑了我的答案。现在应该可以了。pd.read_csv是否可以处理包含和HTML表的电子邮件?
 df['TotalVal'] = df[[0,1,2]].fillna(0).T.sum()
 df['TotalVal'] = df[[0,1,2]].fillna(0).sum(axis=1)