【pandas】dataframe高级用法三

上一篇:

一、筛选数据

1. 布尔值筛选法


dfmonday=bok[bok['j_w']=='Monday']

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["&#x8FD8;&#x8F66;&#x7AD9;&#x70B9;"]==node,"&#x501F;&#x8F66;&#x7AD9;&#x70B9;"]返回的series
  • df2.loc[df2["&#x8FD8;&#x8F66;&#x7AD9;&#x70B9;"]==node,"&#x501F;&#x8F66;&#x7AD9;&#x70B9;"].values表示的是array数组

二 、数据分组统计

1. apply的伟大应用

1.1 对应于多列的运算

具有并行操作

【pandas】dataframe高级用法三
文件如上图所示,我需要对最后两列的经纬度作为一个函数的输入元素,获得一个新结果。
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)

【pandas】dataframe高级用法三
ifo["size"] =ifo[["size"]].apply(lambda x: x["size"]//10 ,axis=1)

修改后:

【pandas】dataframe高级用法三

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)

上一篇:

Original: https://blog.csdn.net/panbaoran913/article/details/120706553
Author: panbaoran913
Title: 【pandas】dataframe高级用法三

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/740069/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球