dataframe进行算术运算

pandas的dataframe可以直接进行算术运算,包括一系列的加法减法、方差、标准差等等。

但是计算时会面临两个问题:

  1. 其一,如何忽略非数字数据,因为在非数字数据的影响下,pandas会直接忽略该行数据,不进行计算。虽然不抛异常,但是丢失了数据。
  2. 其二,pandas计算都是按行或列,如果我们求一个区域内的算术运算结果,需要再将行或列运算后的结果再运算,这对于一些简单的运算,譬如加减乘除类不会有影响,但是对于方差类的运算会有影响。

下面说下我的解决办法:

  1. 针对数据类型问题,pandas提供了一个强大的apply方法,可以接受函数并作用于dataframe,所以我可以对该数据集进行清洗,即实现忽略非数字类型数据(置0是比较好的)。
  2. 针对pandas本身的运算都是按行或按列,结果为一个series的问题,我采取的是numpy的算术运算,numpy是将其视为一个多维数组,而非结构性数据,这样计算出来为最终整个多维数组的结果。

Numpy与dataframe互转十分方便,

numpy -> dataframe:pd.Dataframe(numpy数组),

dataframe -> numpy:numpy数组 = df.values

df = pd.read_excel('D:\\test.xlsx')
# 原df
print(df)
# 转为numpy数组
arr = df.values
print(arr)
# 由numpy数组转回dataframe
df_new = pd.DataFrame(arr)
print(df_new)

其实这里比较重要的问题是一个数据清洗的问题,正如我这个数据集里的“中文”是无法被识别的,无法正常运算。所以需要将其清洗掉,目的就是为了把无法计算的数据置0:

  • 第一步:调用dataframe的apply方法传入函数 pd.to_numeric,错误参数设置为errors=coerce,转数据类型为数值,不能转的置为nan。
df_new = df.apply(pd.to_numeric, errors='coerce')

第一步就可以将那些非数值型的数字置为nan了。但是此时若是进行算术运算结果会是nan,所以需要进一步处理。

  • 第二步:将nan置为0。
  • df_num = df_new.fillna(0)

    结果如下:

接下来就可以进行算术运算了,以加法为例:

将清洗后的数据集转为numpy数组,然后运算。

arr = df_num.values
sum_ = np.sum(arr)
print(sum_)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值