pandas碎片笔记(二)【查询、筛选、删除、拼接】

练习数据BJ_tianqi-F.csv:https://pan.baidu.com/s/1RRdbJkdu7pn9fD8EbeL_2g
提取码:7go6

1、筛选符合条件的记录

#导入包
import pandas as pd
#读取文件
df=pd.read_csv(r'C:\Users\Administrator\20201225课后资料\20201225课后资料\BJ_tianqi-F.csv')

#按照两列排序,按照最高温度升序、最低温度降序排列
#df.sort_values(by=['最高温度','最低温度'],ascending=['True','False'])


#先将最高温度的符号去掉
df.loc[:,'最高温度']=df['最高温度'].str.replace('℃','').astype(int)

#查询   最高温度>20且<30的
df[(df['最高温度']>20) & (df['最高温度']<30)]

#查询拓展(不传参)最高温度>20且<30的
# str1='最高温度>20 and 最高温度<30'
# df.query(str1)

#查询拓展(传参)最高温度>平均值
# wdmean=df['最高温度'].mean()
# print(wdmean)
# str2='最高温度>@wdmean'
# df.query(str2)          

2、获取某个时间(段)的记录

#获取9月份数据

#导入包
import pandas as pd
#读取文件
df=pd.read_csv(r'C:\Users\Administrator\20201225课后资料\20201225课后资料\BJ_tianqi-F.csv')

# parse_dates=['日期'] 将日期列转化为datetime  相当于  pd.to_datetime
# index_col 将那一列作为的行索引   相当于 set_index
#df = pd.read_csv(r'C:\Users\Administrator\20201225课后资料\20201225课后资料\BJ_tianqi-F.csv',parse_dates=['日期'],index_col=['日期'])


#第一种   将日期列转为索引    inplace为True表示原有基础上修改   【#若数据非有序排列  会丢失】
#df.set_index(df['日期'],inplace=True)
#取出索引在9/1到9/30之间的数据,会发现此时丢失了4,5,6的数据,查看原数据,发现丢失数据排列在9/1之前
#df.loc['2019/9/1':'2019/9/30']


# 第二种 python 内置的str方法
#df.loc[[True if i.startswith('2019/9') else False for i in df.index.tolist()],:]


#第三种  是否包含/9/    
# condition = df['日期'].str.contains('/9/')
# df[condition]        
    

#第四种   将日期转成datetime类型
import datetime
df.loc[:,'日期']=pd.to_datetime(df['日期'])
df.set_index(df['日期'],inplace=True)
#获取2019年一月的数据
df.loc['2019/01']   #建议使用df.loc    # df['2019/01']也可取到
    #获取某一天不能使用df['2019-01-01'],系统会认为你在取一列,但可用切片 df['2019-01-01':'2019-01-01'](中括号里面/-都可  有0无0都可)    
# 获取一段时间
# df.truncate(after = '2019-11-01') # 返回 after 以前的数据
# df.truncate(before = '2019-11-01') # 返回 before 以后的数据
# df['20190901':'2019/9/10']

利用dt进行获取:

df = pd.read_csv(r'C:\Users\Administrator\20201225课后资料\20201225课后资料\BJ_tianqi-F.csv',parse_dates=['日期'])
df['月份']=df['日期'].dt.month
df

# df['日期'].dt.day   # 提取日期
# df['日期'].dt.year # 提取年份
# df['日期'].dt.hour # 提取小时
# df['日期'].dt.minute # 提取分钟
# df['日期'].dt.second # 提取秒
# df['日期'].dt.week # 一年中的第几周
# df['日期'].dt.weekday # 返回一周中的星期几,0代表星期一,6代表星期天
# df['日期'].dt.dayofyear # 返回一年的第几天

# df['日期'].dt.quarter # 得到每个日期分别是第几个季度。
# df['日期'].dt.is_month_start # 判断日期是否是每月的第一天
# df['日期'].dt.is_month_end # 判断日期是否是每月的最后一天
# df['日期'].dt.is_leap_year # 判断是否是闰年
# df['日期'].dt.month_name() # 返回月份的英文名称
# df['日期'].dt.to_period('Q') # M 表示月份,Q 表示季度,A 表示年度,D 表示按天

3、删除数据

import numpy as np
import pandas as pd
from pandas import DataFrame,Series
df = DataFrame(np.arange(9).reshape(3,3),columns=['one','two','three'])
display(df)
print('*'*20)

# axis = 0, 保留columns,数据在行上下浮动
# axis = 1, 保留index, 数据在列左右浮动


# 删除第0和1行
df1=df.drop(labels=[0,1],axis = 0)
display(df1)
print('*'*20)

# 删除one列
df1.drop(['one'],axis =1)

4、数据的拼接 concat

# 数据的拼接--concat
# 沿着一个轴进行拼接
import numpy as np
df1 = pd.DataFrame(np.arange(6).reshape(3,2),columns=['four','five'])
df2 = pd.DataFrame(np.arange(6).reshape(2,3),columns=['one','four','three'])
print(df1)
print(df2)

# axis=0 在行上增加数据
# join='inner' 拼接的方式

'''
axis=0 , join='inner' : 行上面进行伸缩,列的上面取交集
axis=0 , join='outer' : 行上面进行伸缩,列的上面取并集  等价于 df1.append(df2)
axis=1 , join='inner' : 列上面进行伸缩,行的上面取交集
axis=1 , join='outer' : 列上面进行伸缩,行的上面取并集
'''

pd.concat([df1,df2],axis=0,join='outer')  #df1.append(df2)   得到的效果一样


# ignore_index: 指的是拼接后是否忽视原df各自的索引
# join:表示“如何拼接” outer表示取并集,inner表示取交集
# result = pd.concat([df1,df2],axis=0,ignore_index=True,join='outer')
# print(result)

5、数据的合并 merge

# 数据的合并--merge
# 两个数据之间使用哪个列进行连接
df1=pd.DataFrame({'名字':list('ABCDE'),'性别':['男','女','男','男','女'],'职称':['副教授','讲师','助教','教授','助教']},
                 index=range(1001,1006))

print(df1)

df2=pd.DataFrame({'姓名':list('ABDAX'),'课程':['C++','计算机导论','汇编','数据结构','马克思原理'],'职称':['副教授','讲师','教授','副教授','讲师']},
                 index=[1001,1002,1004,1001,3001])

print('*'*20)
print(df2)
# how='inner'  根据名字列获取交集   suffixes=['_df1','_df2']重命名重复列名的方式
# pd.merge(df1,df2,on=['名字'],how='inner' ,suffixes=['_df1','_df2'])

# pd.merge(df1,df2,on=['名字'],how='left' ,suffixes=['_df1','_df2'])
# pd.merge(df1,df2,on=['名字'],how='right' ,suffixes=['_df1','_df2'])
# pd.merge(df1,df2,on=['名字'],how='outer' ,suffixes=['_df1','_df2'])

#根据两列去取集合
# pd.merge(df1,df2,on=['名字','职称'],how='left')

# pd.merge(df1,df2,left_index=True,right_index=True,how='left') #等同于 df1.join(df2)

#当两边列名不一样时,可以按如下方式取
# pd.merge(df1,df2,left_on='名字',right_on='姓名')

保存csv数据(df为存放数据的变量名称): df.to_csv(‘路径’)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值