pandas 筛选(pandas读取excel文件)

网友投稿 284 2022-08-30


pandas 筛选(pandas读取excel文件)

t={ "age": [18, 30, np.nan, 40, np.nan, 30], "city": ["BeiJing", "ShangHai", "GuangZhou", "ShenZhen", 'BeiJing', "ShangHai"], "sex": [None, "male", "female", "male", np.nan, "unknown"], "birth": ["2000-02-10", "1988-10-17", None, "1978-08-08", np.nan, "1988-10-17"], "score":[11,7,33,44,22,44], "naem":['sdf','aa','bb','tt','ere','tt'], "name":['sdf 11','aa 22','bb 33','tt 44','ere 55','tt 66']}df =DataFrame(t)index = pd.Index(data=["Tom", "Bob", "Mary", "James", "Andy", "Alice"], name="name")data = { "age": [18, 30, np.nan, 40, np.nan, 30], "city": ["Bei Jing ", "Shang Hai ", "Guang Zhou", "Shen Zhen", np.nan, " "], "income": [None, 11, 22,33, np.nan, 55], "sex": [None, "male", "female", "male", np.nan, "unknown"], "birth": ["2000-02-10", "1988-10-17", None, "1978-08-08", np.nan, "1988-10-17"]}df = pd.DataFrame(data=data, index=index)print(df.get('age1') ) #使用get,没有此列也不会报错print(df.get('age').get(1)) # 索引到具体的单元格print(df['age'][1]) #索引到具体的单元格print(df[::2]) #每两行筛选 一次数据print(df[::-1]) #行逆序print(df['age']) #筛选单列print(df[['age','sex']]) #筛选多列print(df.iloc[0]) #筛选第一行print(df.iloc[1, 0]) #筛选出单元格 第二行第一列的数据print(df.iloc[[1, 0, 2], 0]) # 筛选出多行一列 第二行、第一行、第三行对应的第一列的数据print(df.iloc[0:3, 0:2]) #切片,多行多列print(df.loc["Tom": "Mary"]) #多行print(df.loc[:, "age": "birth"]) # 多列# loc与iloc的区别: 通过名称来筛选时,传入的切片是左右都包含的print(df[~(df.sex == 'unknown')]) #取反print(df.loc[df.age > 20, ["age"]]) # 通过loc进行逻辑筛选print(df[df.sex.isin(["male", "female"])]) # 对几个常量进行筛选print(df[df.index.isin(["Bob"])]) # 索引也可以用 isinprint(df[lambda x: x["age"] > 20]) #通过函数进行筛选,必须是带有一个参数print(df.loc[lambda x: x.age > 20, lambda x: ["age"]])# ============user_info=dfgrouped = user_info.groupby(["sex", "age"]) # user_info.groupby(["sex", "age"], sort=False) groupby 会在操作过程中对数据进行排序。如果为了更好的性能,可以设置 sort=Falseprint(grouped.groups)for name, group in grouped: # 遍历分组,如果是根据多个字段来分组的,每个组的名称是一个元组 print("name: {}".format(name)) print("group: {}".format(group))user_info.groupby(["sex", "age"]).get_group(("male", 30)) # 选择一个分组用 get_grouprs=grouped["age"].agg(np.max) # 对分组后的某一列进行统计# 如果是根据多个键来进行聚合,默认情况下得到的结果是一个多层索引结构。可以设置参数 as_index=False 避免多层索引# 对已经有多层索引的对象可以通过reset_index ,去掉多层索引 rs.reset_index()grouped["income"].agg([np.sum, np.mean]).rename(columns={"sum": "income_sum", "mean": "income_mean"}) #一次进行多个聚合操作,并重命名统计结果grouped.agg({"age": np.mean, "income": np.sum}) # 不同列进行不同的聚合操作# 使用apply,通过带参数的函数对列进行处理def f1(ser, num=2): return ser.nlargest(num).tolist() #print(grouped["income"].apply(f1))# 前面进行聚合运算的时候,得到的结果是一个以分组名作为索引的结果对象。虽然可以指定 as_index=False ,但是得到的索引也并不是元数据的索引。# 如果我们想使用原数组的索引的话,可以使用transformgrouped = user_info.groupby("sex")print(grouped["income"].transform(np.mean))print(user_info.to_json()) #将dataframe转成json字符串data1 = { "name": ["Tom", "Bob"], "age": [18, 30], "city": ["Bei Jing ", "Shang Hai "]}df1 = pd.DataFrame(data=data1)data2 = { "name": ["Mary", "James"], "age": [35, 18], "city": ["Guang Zhou", "Shen Zhen"]}df2 = pd.DataFrame(data=data2)# append和concat实现的功能差不多print(df1.append(df2,ignore_index=True)) #ignore_index=True 是为了重新生成索引print(pd.concat([df1,df2],ignore_index=True))data2 = {"name": ["Bob", "Mary", "James", "Andy"], "sex": ["male", "female", "male", np.nan], "income": [8000, 8000, 4000, 6000]}df2 = pd.DataFrame(data=data2)#join和merge功能差不多print(pd.merge(df1, df2, on="name", how="outer")) #outer inner left rightprint(df1.join(df2.set_index("name"),on="name",how='outer'))# 两个 DataFrame 中需要关联的键的名称不一样,可以通过 left_on 和 right_on 来分别设置 pd.merge(df1, df2, left_on="name1", right_on="name2")# 两个DataFrame中都包含相同名称的字段时,可以设置参数 suffixes,默认 suffixes=('_x', '_y') 表示将相同名称的左边的DataFrame的字段名加上后缀 _x,右边加上后缀 _y


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:爬虫杂记(虫虫爬爬爬)
下一篇:Java实现经典游戏复杂迷宫
相关文章

 发表评论

暂时没有评论,来抢沙发吧~