pandas 筛选

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[::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"])]) # 索引也可以用 isin
print(df[lambda x: x["age"] > 20]) #通过函数进行筛选,必须是带有一个参数
print(df.loc[lambda x: x.age > 20, lambda x: ["age"]])
# ============
user_info=df
grouped  = user_info.groupby(["sex", "age"]) # user_info.groupby(["sex", "age"], sort=False) groupby 会在操作过程中对数据进行排序。如果为了更好的性能,可以设置 sort=False
print(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_group

rs=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 ,但是得到的索引也并不是元数据的索引。
# 如果我们想使用原数组的索引的话,可以使用transform
grouped = 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 right
print(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

原文地址:https://www.cnblogs.com/testzcy/p/12080639.html

时间: 2024-10-07 05:09:09

pandas 筛选的相关文章

pandas筛选2个csv文件列内容相同的项

import pandas as pd a= pd.read_csv(a_csv_file, usecols=[1]) b= pd.read_csv(b_csv_file, usecols=[1]) a_list = a.values.tolist() b_list = b.values.tolist() new_a_list = [f[0] for f in a_list] new_b_list = [f[0] for f in b_list] both = list(set(new_a_li

pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大。

Select rows from a DataFrame based on values in a column -pandas 筛选 https://stackoverflow.com/questions/17071871/select-rows-from-a-dataframe-based-on-values-in-a-column-in-pandas pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大. 在SQL数据中, 我们可以用这样的语句: select * from

Pandas日期数据处理:如何按日期筛选、显示及统计数据

前言 pandas有着强大的日期数据处理功能,本期我们来了解下pandas处理日期数据的一些基本功能,主要包括以下三个方面: 按日期筛选数据 按日期显示数据 按日期统计数据 运行环境为 windows系统,64位,python3.5. 1 读取并整理数据 首先引入pandas库 import pandas as pd 从csv文件中读取数据 df = pd.read_csv('date.csv', header=None) print(df.head(2)) 0 1 0 2013-10-24 3

python利用pandas和xlrd读取excel,特征筛选删除0值超过99%的列

利用xlrd读取excel筛选0值超过99%的列,并删除import xlrdworkbook=xlrd.open_workbook(r"123.xlsx")table = workbook.sheet_by_name('Sheet1')nrows=table.nrowsncols=table.ncolsdel_col=[]for j in range(ncols) : sum = 0 for ai in table.col_values(j): if ai == 0.0 : sum+

python pandas进行条件筛选时出现ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().”

在使用pandas进行条件筛选时,使用了如下的代码: fzd_index=data[(data['实际辐照度']<mi)or(data['实际辐照度']>ma)].index 原本以为,并没有太大的问题.但是出现了ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().” 这样的报错. 正确方式: fzd_index=data[(data.

pandas DataFrame数据筛选和切片

DataFrame数据筛选--loc,iloc,ix,at,iat 条件筛选 单条件筛选 选取col1列的取值大于n的记录: data[data['col1']>n] 筛选col1列的取值大于n的记录,但是显示col2,col3列的值: data[['col2','col3']][data['col1']>n] 选择特定行:使用isin函数根据特定值筛选记录.筛选col1值等于list中元素的记录: data[data.col1.isin(list)] 多条件筛选 可以使用&(并)与|

&lt;转&gt;pandas学习

1.Pandas 基本介绍 Numpy 和 Pandas 有什么不同? 如果用 python 的列表和字典来作比较, 那么可以说 Numpy 是列表形式的,没有数值标签,而 Pandas 就是字典形式.Pandas是基于Numpy构建的,让Numpy为中心的应用变得更加简单. pandas基本功能和使用方法有哪些? 要使用pandas,首先需要了解他主要两个数据结构:Series和DataFrame. Series的 创建: import pandas as pd import numpy as

python 数据处理学习pandas之DataFrame

请原谅没有一次写完,本文是自己学习过程中的记录,完善pandas的学习知识,对于现有网上资料的缺少和利用python进行数据分析这本书部分知识的过时,只好以记录的形势来写这篇文章.最如果后续工作定下来有时间一定完善pandas库的学习,请见谅!                     by LQJ 2015-10-25 前言: 首先推荐一个比较好的Python pandas DataFrame学习网址 网址: http://www.cnblogs.com/chaosimple/p/4153083

Pandas:让你像写SQL一样做数据分析

1. 引言 Pandas是一个开源的Python数据分析库.Pandas把结构化数据分为了三类: Series,1维序列,可视作为没有column名的.只有一个column的DataFrame: DataFrame,同Spark SQL中的DataFrame一样,其概念来自于R语言,为多column并schema化的2维结构化数据,可视作为Series的容器(container): Panel,为3维的结构化数据,可视作为DataFrame的容器: DataFrame较为常见,因此本文主要讨论内