上一篇:
- DataFrame数据筛选(二)
- 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["还车站点"]==node,"借车站点"]
返回的seriesdf2.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)
上一篇:
Original: https://blog.csdn.net/panbaoran913/article/details/120706553
Author: panbaoran913
Title: 【pandas】dataframe高级用法三
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/740069/
转载文章受原作者版权保护。转载请注明原作者出处!