Pandas入门——篇2

跟着[孙兴华]老师学习——收获满满

1——DataFrame

1.1 日期差值

m = d[‘结束时间’] - d[‘起始时间’]
d[‘天数’] = m.apply(lambda x: x.days)

1.2 name属性

在这里插入图片描述

1.3 排序

import pandas as pd
路径 = 'e://workspace//pandas/排序.xlsx'
data = pd.read_excel(路径,index_col='序号')  ## 序号作为索引
data.sort_values(by=['数学', '语文', '生物'], inplace=True, ascending=[False,True, False]) 
data.sort_index(inplace=True)  ## 索引排序

1.4 数据查询loc

import pandas as pd
路径 = 'e://workspace//pandas/筛选.xlsx'
data = pe.read_excel(路径, index_col ='出生日期')
data.loc['2018-08-20':'2022-08-10',['数学', '语文', '英语']]
data.loc[(data['语文'] > 80) & (data['数学'] >= 90)]
data.loc[data['性别']=='男, '称呼'] = '先生'  ## 添加一个新的列
data.loc[data['性别']=='女, '称呼'] = '女士'  ## 添加一个新的列
data1 = pd.read_excel(路径, index_col='序号', sheet_name='Sheet2')
d1 = data1.loc[2:4]  # 2-4行
条件1 = data1.loc['性别'] == '男'
print(data1[条件1])
条件2 = "性别=='男' and 总分 >= 150"
条件3 = "语文 <= 90 and 总分 >= 450"
data1.query(条件2)  ## 使用query填写条件
条件 = data1['姓名'].str.startswith('王')
条件 = data1['地址'].str.contains('武汉')
条件 = data1['地址'].str.contains('[a-cA-C]座')  ## 从爬虫教程,学习正则表达式

1.5 获取某个日期之前之后的数据切片

data2 = pd.read_excel(路径, index_col='出生日期', parse_dates=['出生日期'])  ## 日期处理
data2 = data.sort_values('出生日期')
data2.truncate(before='1980').head()  ## 1980以后的数据; 类似 a <= x <= b中的a,>=a的值符合条件
data2.truncate(after='1990-12').head()  ## 1990-12之前的数据
data2.truncate(before='1995-07 21:09:28').head()  ## 1995-07以后的数据
data2['1980''2022'] ## 1980以后的数据;
data2['1980-01-1''2022-06-08']  ## 1980以后的数据,默认取所有的列
条件 = (
'@data1.出生日期.dt.year > 1980 and'
'@data1.出生日期.dt.year < 1995 and'
'性别 == "男"'
)
data1.query(条件))  ## 这种写法的时候,不能把日期当作索引

1.6 drop()用法

路径 = 'e://workspace/pandas/drop练习.xlsx'
data = pd.read_excel(路径, index_col='序号')
data.drop(labels=[1,3])  ## 删除多行数据
data.drop('语文', axis=1)  ## 删除单列数据
d1 = data.drop(labels=['语文', '数学'], axis=1)  ## 删除多列数据,不保存修改,生成新对象
data.drop(labels=['语文', '数学'], axis=1, inplace=True)  ## 删除多列数据

1.7 缺失值处理

axis=0 删除有空值的行
asix=1 删除有空值的列
how=all any
axis=0, thresh = 10 缺失值少于10,删除该行
subset:list
data1.isnull()
data1.notnull()
data1.dropna(axis=1)  ## 有空值的列就删
data1.dropna(how='all') ##某一行都是空才去删除
data1.dropna(subset=['语文', '数学']) ## 只对该两列有空值,进行删除操作
data1.fillna(520)  ## 空值一律填充520
data1.fillna({'语文':0.1, '数学':0.3, '英语':0.66})  ## 不同列空值不同值填充
data1.fillna(method='ffill') ##用前面的值填充ffill———bfill pad(向后填充)———backfill(向前填充)
data1.fillna(method='bfill', limit=2)  # 最多填充2

1.8 数学统计函数

data1.describe()
data1['数学'].deecribe()
data1['语文'].median()
data1['语文'].cov()
data1['语文'].corr()

1.9 处理重复值

data = pd.read_excel(路径)
print(data['姓名'].unique())
print(data['姓名'].value_counts())
data.drop_duplicates(subset=['姓名'],keep='last') ## 保存最后一个重复值 first,last,False
重复 = data.duplicated(subset=['姓名', '年龄'])
print(data[重复])

1.10 处理数值计算 vs 多层索引 vs 数据替换

import pandas as pd
pd.options.mode.use_inf_as_na = True  # 无穷大inf当作nan来处理
data = {
    '班级': ['1班', '1班', '2班', '2班', '3班', '3班'],
    '学号': ['a', 'b', 'c', 'a', 'b', 'c'],
    '分数': [10, 20, 30, 40, 50, 60]
}
df1 = pd.DataFrame(data)
路径 = 'e://pandas//多层索引.xlsx'
df2 = df1.set_index(['班级', '学号'])         # 法1
df3 = pd.read_excel(路径, index_col=[0, 1])  # 法2
print(df2.loc['1班'])
print(df2.loc[('1班', 'a')])
print(df2.loc[('1班', slice(None)), :])  # 1班所有行
data.sort_index(level='科目') # 对于无序数据,需要先排序
data.loc[('语文', slice(None),:]
idx=pd.MultiIndex.from_product([[2019, 2010], [5, 6]], names=['年', '月']) # 笛卡尔积产生数据
col = pd.MultiIndex.from_product([['香蕉', '苹果'], ['土豆', '茄子']], names=['水果', '蔬菜'])
数据 = pd.DataFrame(np.random.random(size=(4, 4)), index=idx, columns=col) 
-------------------------------------------------------------------------------------
data = {
    "name": ['hello', 'bang', 'gua', 'kol', 'lu'],
    'area': ['市区', '郊区', '市中心', '乡下', '街区'],
    '缩写': ['A', 'A', 'B', 'B', 'A']
       }
df1 = pd.DataFrame(data)
df1['缩写'].replace(['A'], ['25'], inplace=True)  # 直接替换
df1['缩写'].str.replace('A', '25', inplace=True)  # 字符串替换
d = {'B':30}
df1['缩写'].replace(d, inplace=True)  # 使用字典来替换
df1['缩写'].replace(['A-Z'], regex=True, inplace=True)  # 使用正则表达式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值