数据分析pandas

pandas三个核心的数据类型:

  1. Series – 数据系列 – 表示一维的数据
  2. DataFrame – 数据框、数据窗、数据表 – 表示二维的数据(表格)
  3. index – 索引 – 为SeriesDataFrame对象提供索引服务
# 创建Series对象(方法一)
ser1 = pd.Series(data=[420, 380, 500, 520, 230], index=[f'{x}季度' for x in '一二三三四'])
ser1
一季度    420
二季度    380
三季度    500
三季度    520
四季度    230
dtype: int64
# 创建Series对象(方法二)
ser2 = pd.Series(data={
    '一季度':420,
    '二季度':380,
    '三季度':520,
    '四季度':500
})
ser2
一季度    420
二季度    380
三季度    520
四季度    500
dtype: int64
  
  
# 切片
ser1['二季度':'三季度']
二季度    380
三季度    500
三季度    520
dtype: int64
  
  
# 花式索引
ser1[['一季度', '二季度', '一季度']]
一季度    420
二季度    380
一季度    420
dtype: int64
  
  
# 布尔索引
ser1[ser1 > 400]
一季度    420
三季度    500
三季度    520
dtype: int64
  
# 获得描述性统计信息
ser1.describe()
print(ser1.sum())
print(ser1.mean())
print(ser1.std())
print(ser1.var())
print(ser1.median())
# 极差
print(np.ptp(ser1))
# 众数
print(ser1.mode()[0])
# 判断元素是第一次出现还是重复出现 -- 布尔数组
ser3.duplicated()

# 去重(保留最后一项,默认保留第一项)
ser3.drop_duplicates(keep='last')

# keep参数
# first -- 保留第一项,last -- 保留最后一项,False -- 重复的项一律不保留
ser3.drop_duplicates(keep=False)

# 去重(获得独一无二的元素数据构成的数组)
ser3.unique()

# 查看不重复元素的个数
ser3.nunique()

# 统计每个数据重复的次数
ser3.value_counts()

# 判断空值
ser3.isnull()

# 判断非空值
ser3.notnull()

# 删除空值
# ser3.dropna(inplace=True)
# inplace -- 是否是直接修改原数据
ser3.dropna()

# 填充空值
ser3.fillna('orange')

# 用前一个元素填充空值
ser3.fillna(method='ffill')

# 用后一个元素填充空值
ser3.fillna(method='bfill')

# 把满足条件的数据保留,不满足条件的数据替换
ser4.where(ser4 > 30, 30)

# 把满足条件的数据替换,不满足条件的数据保留
ser4.mask(ser4 > 30, 30)
# 对ser1中的数据进行线性归一化
x_max, x_min = ser1.max(), ser1.min()
ser1.apply(lambda x: (x - x_min) / (x_max - x_min))

# 对ser1中的数据进行零均值归一化
mu, sigma = ser1.mean(), ser1.std()
ser1.apply(lambda x: (x - mu) / sigma)
# 值最大的三个,可以解决topN问题
ser1.nlargest(3)

# 值最小的两个
ser1.nsmallest(2)

DataFrame

# 创建DataFrame的第一种方式(基于二维数组)
df = pd.DataFrame(
    data = np.random.randint(60, 101, (5, 3)),
    index = np.arange(1001, 1006),
    columns = ['语文', '数学', '英语']
)
df

	语文	数学	英语
1001	74	67	86
1002	86	83	66
1003	85	93	60
1004	69	85	78
1005	71	68	85
# 创建DataFrame的第二种方式(基于字典)
scores = {
    '语文': [62, 72, 93, 88, 93],
    '数学': [95, 65, 86, 66, 87],
    '英语': [66, 75, 82, 69, 82],
}
df2 = pd.DataFrame(data=scores, index=np.arange(1001, 1006))
df2
# 创建DataFrame的第三种方式
# 读取CSV文件
# read_csv函数的几个重要参数
# ~ delimiter / sep : 分隔符(默认是英文的逗号)
# ~ nrows: 读取的行数
# ~ skiprows: 跳过哪些行
# ~ usecols: 指定读取哪些列
# ~ index_col: 编码(解决乱码现象)
df3 = pd.read_csv(
    r'data/2018年北京积分落户数据.csv', 
    delimiter=',',
    index_col='id',
    usecols=['id', 'name', 'score'],
    nrows=10,
    skiprows=np.arange(1, 11)
)
df3
# 创建DataFrame的第四种方式(读取Excel文件)
df4 = pd.read_excel(
    'data/小宝剑大药房(犀浦店)2018年销售数据.xlsx',
    header=1,
    nrows=20,
    sheet_name='工作表1'
)
df4
import pymysql
# 创建DataFrame的第五种方式(从MySQL数据库读取数据)
conn = pymysql.connect(
    host='47.104.31.138',port=3306,
    user='guest',password='Guest.618',
    database='hrs',charset='utf8mb4'
)
df5 = pd.read_sql('select dno, dname, dloc from tb_dept', conn)
df5

df6 = pd.read_sql(
    'select eno, ename, job, mgr, sal, comm, dno from tb_emp', 
    con = conn,
    index_col='eno'
)
df6
# 把两个表连成一个表
pd.merge(
    df6,
    df5,
    on='dno',
    how='inner'
)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值