【pandas】dataframe高级用法三

上一篇:

一、筛选数据

1. 布尔值筛选法

# single condition
dfmonday=bok[bok['j_w']=='Monday']
# more condition
df_mots[(df_mots['time'] < 25320)&(df_mots['time'] >= 25270)]

2.删除满足条件的行

df.drop(df[df["start_grid"]== -1].index,inplace=True)

df:DataFrame
drop(index, inplace=True) 在原表格上删除某些索引
df["start_grid"]== -1 :返回 布尔列表
df[df["start_grid"]== -1].index :返回索引列表

3. dataframe中读取某个数值

df2.loc[df2["还车站点"]==node,"借车站点"].values[0]

注意到:

  • df2.loc[df2["还车站点"]==node,"借车站点"]返回的series
  • df2.loc[df2["还车站点"]==node,"借车站点"].values表示的是array数组

二 、数据分组统计

1. apply的伟大应用

1.1 对应于多列的运算

具有并行操作

在这里插入图片描述
文件如上图所示,我需要对最后两列的经纬度作为一个函数的输入元素,获得一个新结果。

df1["property_grid"]=df1[["wgs84_lon","wgs84_lat"]].apply(lambda x: get_pos_lola( x["wgs84_lon"], x["wgs84_lat"]),axis=1)
  • x 对应的是一个dataframe=df1[[“wgs84_lon”,“wgs84_lat”]]
  • get_pos_lola(a,b)是我写的自定义函数,a,b分为经纬度字符串。
  • 因为是横向取值,所以写axis=1

1.2 对应于单列的运算

ifo=pd.read_csv("../result/info.csv",header=None,names=["station","jing","wei","name","distict","types","size"])
ifo.head(3) 

在这里插入图片描述

ifo["size"] =ifo[["size"]].apply(lambda x: x["size"]//10 ,axis=1)

修改后:
在这里插入图片描述

2.groupby的应用

    dfi=data.groupby(column)[["inner"]].sum()
    dft=data.groupby(column).count()

三、数据的合并

df1=pd.DataFrame({"name":["ray","jcack","lucy","bob","candy"],
                  "city":["hangzhou","beijing","hangzhou","chengdu","suzhou"],
                  "score":[10,30,20,15,50]},columns=["name","city","score"])
df2=pd.DataFrame({"name":["faker","fizz"],"city":["wenzhou","shanghai"],"score":[55,80]},
                 columns=["name","city","score"])
df3=pd.DataFrame({"name":["faker","fizz"],"city":["wenzhou","shanghai"],"gender":["male","female"]},
                 columns={"name","city","gender"} )

df1:

name	city	score

0 ray hangzhou 10
1 jcack beijing 30
2 lucy hangzhou 20
3 bob chengdu 15
4 candy suzhou 50

上下拼接

  • 两份数据列名完全相同的情况,在上下方向拼接,ignore_index忽略掉原来的索引
pd.concat([df1,df2],ignore_index=True)
  • 两份数据的列名不完全相同的时候,进行上下方向拼接,.
    默认按照相同字段进行拼接,会得到两份数据的并集,没有的值返回NaN
pd.concat([df1,df3],ignore_index=True)
  • 在连接轴上创建一个索引层(本质上是一个双重索引)
df_concat=pd.concat([df1,df3],keys=["df1","df3"]) 
df_concat
  • 合并重叠数据
#创建示例数据
data1=pd.DataFrame({"score":[60,np.nan,75,80],"level":[np.nan,"a",np.nan,"f"],"coat":[1000,1500,np.nan,1200]})
data2=pd.DataFrame({"score":[34,58,np.nan],"level":[np.nan,"c","s"]})

data1.combine_first(data2) 

上一篇:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值