使用Pandas的Python行计算
我正在使用python(使用pandas库)处理大表 我想执行各种类型的向量操作,例如与表的每一行的关联 这可能是一个简单的问题,但对我来说,很难处理数据帧结构。我不知道如何将每一行(或列)转换为列表(或numpy数组) 即使计算行数似乎也不是一个简单的问题,因为像使用Pandas的Python行计算,python,pandas,Python,Pandas,我正在使用python(使用pandas库)处理大表 我想执行各种类型的向量操作,例如与表的每一行的关联 这可能是一个简单的问题,但对我来说,很难处理数据帧结构。我不知道如何将每一行(或列)转换为列表(或numpy数组) 即使计算行数似乎也不是一个简单的问题,因为像df.count()这样的函数似乎忽略了空数据 简单数据表和预期结果表如下所示。在这种情况下,我想计算每行对的总和 实表的大小要大得多(超过1000行和1000列),并且包含一些空值 Data.csv: Label Col1 Col
df.count()
这样的函数似乎忽略了空数据
简单数据表和预期结果表如下所示。在这种情况下,我想计算每行对的总和
实表的大小要大得多(超过1000行和1000列),并且包含一些空值
Data.csv:
Label Col1 Col2
Row1 1 2
Row2 3 4
Row3 5 6
Output.csv:
Label Col3
Row1,Row2 4,6
Row1,Row3 6,8
Row2,Row3 8,10
解决方案的一部分,因为您将有名称稍有不同的重复行,因此无法应用数据帧的drop_duplicates方法:
import pandas as pd
from io import StringIO
data = """
Label Col1 Col2
Row1 1 2
Row2 3 4
Row3 5 6
"""
df1 = pd.DataFrame()
for row in range(df.shape[0]):
df1 = pd.concat([df1, df.ix[row,:] + df[df['Label'] != df.Label[row]]])
df1.reset_index(drop=True, inplace=True)
In [103]: df1
Out[103]:
Label Col1 Col2
0 Row1Row2 4 6
1 Row1Row3 6 8
2 Row2Row1 4 6
3 Row2Row3 8 10
4 Row3Row1 6 8
5 Row3Row2 8 10
熊猫在使用柱子时速度更快,更自然。因此,我建议先转置DF,然后对列求和
链接:你说的
空值是什么意思?是否存在空值或NaN
值,或者该值是否正好等于零。如果存在这样一个空值
,您希望输出是什么样的?@albert抱歉我解释得不好。你可能认为这是一种价值观。当我的真实数据集从图像转换为浮点值时,有一些值。但在这种情况下,这并不重要,因为我将它们作为预处理删除。您可以使用shape
方法获得行数:df。shape[0]
将是行数。@Anton Protopov感谢您的建议。我确认shape[0]返回了包含空值的行数(标签除外)。此外,shape[1]返回了列数,包括标签和空值。我认为必须将DataFrame转换为列表,但似乎可以直接使用DataFrame完成。虽然还需要做一些工作,但非常感谢您的回答。@为了在完成后特别显示您的代码。目前,我只能通过从DataFrame生成列表并对每行运行双for循环来完成此操作,这似乎是一种BruceForce方法。我想找到使用数据帧本身的解决方案。谢谢你的建议。我知道T函数可以很容易地完成表的转置,但我不知道使用列更好。我最好使用DataFrame来找到解决方案。@特别是,DataFrame基本上是不同类型列的集合/列表,而不是关系数据库,它是行的集合。对于典型的统计函数,如sum()、mean()、variance()等,每个列都可以快速操作。另一个用于计算目的的建议将列强制为本机数字类型(如float64或int)。尽管我的目标是使用更复杂的函数,比如每个向量之间的欧几里德距离,但它似乎是以同样的方式应用的。事实上,我以前认为处理行更自然。非常感谢你的提示。