python之数据分析pandas(4)

python之数据分析pandas(4)

前言

之前学习了如何查询读取数据、查询数据、存储数据,那我们可以增加数据嘛,答案是肯定的,那pandas怎么增添数据呢?

开始

在进行数据分析时,经常需要按照一定条件创建新的数据列,然后进行进一步分析。pandas提供了几种方法。有直接赋值、apply方法、assign方法。现在就来学一学它们是怎么使用的。同样我们先读取数据,和之前的一样,然后把温度的单位去掉并转换为‘int32’类型。

# 读取数据并将℃替换。
fpath = "./datas/beijing_tianqi/beijing_tianqi_2018.csv"
df = pd.read_csv(fpath)
df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype('int32')
df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype('int32')

直接赋值

直接赋值的方法很简单,就是利用上次说的loc()函数,进行覆盖写入。

# df["bWendu"]其实是一个Series,后面的减法返回的是Series
df.loc[:, "wencha"] = df["bWendu"] - df["yWendu"]

在这里插入图片描述
然后,我们还可以通过条件来进行添加数据,先进行一下判断,然后通过loc()方法进行写入。

# 先创建空列(这是第一种创建新列的方法)
df['wencha_type'] = ''
# 然后进行判断后,将数据通过loc()函数写入
df.loc[df["bWendu"]-df["yWendu"]>10, "wencha_type"] = "温差大"
df.loc[df["bWendu"]-df["yWendu"]<=10, "wencha_type"] = "温差正常"

最终:
在这里插入图片描述

df.apply方法

applay方法的解释是:
Apply a function along an axis of the DataFrame.
Objects passed to the function are Series objects whose index is either the DataFrame’s index (axis=0) or the DataFrame’s columns (axis=1).

apply函数的基本形式为下列这样:
DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)
func是一个函数参数,可以自己编写,也可以是它本来就存在的。应该注意一下的是axis,因为函数参数的传入是通过axis来实现的。如果我们设定axis=1,就会把一个行的数据作为Series数据传入函数结构中,我们在函数中实现对Series不同属性之间的计算,返回一个结果,则apply函数会自动遍历每一行DataFrame的数据,最后将所有结果组合成一个Series数据结构并返回。

# 我们写一个函数,bWndu大于33,就输出高温,yWendu小于-10就输出低温。
def get_wendu_type(x):
    if x["bWendu"] > 33:
        return '高温'
    if x["yWendu"] < -10:
        return '低温'
    return '常温'
# 我们这里设置axis==1,这是series的index是columns。
df.loc[:, "wendu_type"] = df.apply(get_wendu_type, axis=1)

在这里插入图片描述
这里可以看出,apply方法遍历df对象的每一行并返回一个结果。”常温“或者”低温“或者”高温。同时通过loc()先进行查询,创建了一个新的列标签:wendu_type,然后把每一行中返回的结果给”wendu_type“填充(之前就讲了loc()函数既可以查询,也可以覆盖写入)。

df.assign方法

assign的解释:

Assign new columns to a DataFrame.
Returns a new object with all original columns in addition to new ones.

这个方法和直接俄赋值差不多,我们通过来写一个表达式来展示。

# 可以同时添加多个新的列
df.assign(
	# 摄氏度转华氏度
    yWendu_huashi = lambda x : x["yWendu"] * 9 / 5 + 32,
    bWendu_huashi = lambda x : x["bWendu"] * 9 / 5 + 32
)

转换了之后,这两列同时给加到了数据上面,是不是很神奇啊。
在这里插入图片描述

结尾

希望大家多多指正,越到后面越难懂,理解起来比较困难,如果大家有更好的办法,希望能够多多交流,加深理解。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值