pandas之表连接与高级查询

上期内容:python最最最重要的数据分析工具之pandas

其实上一篇我们已经学习了数据筛选与查询,这里会介绍不一样的高级查询方式;还有一个重要的内容就是表连接。学过数据库的都知道SQL中表连接方式有左连接,右连接,内连接(交集)和全外连接(并集),pandas也可以实现这些表格的连接。

✒️个人主页➡️:进来看看吧

🔎系列专栏🔫:保你不亏的

pandas之表连接与高级查询

文章目录

; 一、高级查询

1.1、query(条件)

a、单条件筛选

df = pd.DataFrame({'name':['王一','李二','赵四'],'class':['一班','二班','一班'],'sex':['男','女','女'],'score':[88,98,78]})

df.query('score >80')

pandas之表连接与高级查询

df.query('sex=="女" and score==78')

pandas之表连接与高级查询

1.2、文本筛选 str.contains()

"""
用法:str.contains(pat, case=True, flags=0, na=nan, regex=True)是否包含查找的字符串
参数:
        pat : 字符串/正则表达式
        case : 布尔值, 默认为True.如果为True则匹配敏感
        flags :  整型,默认为0(没有flags)
        na : 默认为NaN,替换缺失值.
        regex : 布尔值, 默认为True.如果为真则使用re.research,否则使用Python
        返回值: 布尔值的序列(series)或数组(array)
"""
df = pd.DataFrame({'name':['王一小','李二池','赵四'],'class':['一班','二班','一班'],'sex':['男','女','女'],'score':[88,98,78]})

a = df['name'].str.contains('\w{3}')
df[a]

df[df['class'].str.contains('一班')]

pandas之表连接与高级查询

1.3、截断函数 truncate()

在使用.truncate()函数对df的某列进行数据筛选之前,需要先使用df = df.set_index('列名'),
将该列设置为索引,再使用df.sort_index()索引升序。.

用法:DataFrame.truncate(before=None, after=None, axis=None, copy=True)
参数  before:date,string,int,是指截断此索引值之后的所有行
      after:date,string,int,是指截断此索引值前的所有行
      axis:{0或’index’,1或’columns’}(可选),是指轴截断。 默认情况截断索引(行)。
      copy:boolean,默认为True,返回截断部分的副本
df = pd.DataFrame({
    'date':['1','2','5','4','3'],
    'sale_money':[34,56,78,45,35]
})
df = df.set_index('date') .sort_index()

df.truncate(before='2',after='4')

pandas之表连接与高级查询
df = pd.DataFrame({
    'date':['2022-04-16','2022-04-19','2022-04-18','2022-04-17','2022-04-20'],
    'sale_money':[34,56,78,45,35]
})

df = df.set_index('date') .sort_index()

df.index.astype('datetime64[ns]')

df.truncate(before='2022-04-17')

pandas之表连接与高级查询

二、表连接

2.1、pandas.concat([表1,表2],axis,join,sort,ignore_index,keys)

参数说明[表1,表2]需要连接的表 以元组\列表格式输入axis连接方向:0纵向连接,1横向连接join连接方式:inner内连接(交集) outer全外连接(并集)sort数据排序: True默认索引排序,False不排序 默认按照索引排序ignore_index是否忽略原索引 重置索引 一般纵向连接且索引无意义时用keys[‘df1′,’df2’] 分别数据到底属于哪个表格的

dic1 = {
    '姓名':['王一','李二','赵四'],
    '成绩':[78,56,98]
}
dic2 = {
    '姓名':['王一','孙三','周六'],
    '成绩':[98,88,67]
}

df1 = pd.DataFrame(dic1,index=['a','b','c'])
df2 = pd.DataFrame(dic2,index=['a','d','e'])

pd.concat([df1,df2],axis=1,join='inner')

pd.concat([df1,df2],axis=0,ignore_index=True).T

pd.concat([df1,df2],axis=1,keys=['df1','df2'])

pandas之表连接与高级查询
pandas之表连接与高级查询

2.2、df.merge(right, how, on, left_on, right_on,left_index, right_index, sort, suffixes)

参数说明right需要连接的表how连接方式:inner\outer\left\righton有相同列名时,根据哪列连接left_on\right_on若列名不同,根据左\右表的哪个键left_index\right_index左\右表的索引作为连接键sort是否排序suffixes若有相同的列名,给它加后缀,如suffixes=(‘_df1′,’_df2’)输出:列名_df1,列名_df2 默认_x,_y


df1 = pd.DataFrame({'name':['王一','李二','赵四'],'score':[88,98,78]})
df2 = pd.DataFrame({'name':['李二','王一','赵四'],'class':['class1','class2','class1'],'score':[86,99,48]})

pandas之表连接与高级查询

df1.merge(df2,left_index=True,right_index=True)

pandas之表连接与高级查询

df1.merge(df2,on='name',suffixes=('_chinese','_math'))

pandas之表连接与高级查询

2.3、df.join([df],on)

参数说明[df]需要连接的表 以列表格式输入on根据哪列连接

df1=pd.DataFrame({"A":["A0","A1","A2","A3"],
                 "B":["B0","B1","B2","B3"],
                 "key":["K0","K1","K0","K1"]})
df2=pd.DataFrame({"C":["C0","C1"],
                 "D":["D0","D1"]},
                index=["K0","K1"])
df3=pd.DataFrame({"E":["E1","E2"]})

df1.join(df2,on="key")

df1.join([df2,df3])

pandas之表连接与高级查询

下期预告:pandas数据处理三板斧之apply、map与applymap 喜欢的话就一键三连吧!!!

Original: https://blog.csdn.net/m0_69435474/article/details/124299729
Author: 小磊要努力哟
Title: pandas之表连接与高级查询

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

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

(0)

大家都在看

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