python数据分析课程笔记 | 第三章 Pandas数据分析运用(上)

3.1 pandas基础操作

(1)常用数据结构

在这里插入图片描述
在这里插入图片描述
Series常用属性:

  • values:返回Series对象所有元素
  • index:返回索引
  • dtypes:返回数据类型
  • shape:返回series数据形状
  • ndim:返回对象的维度
  • size:返回对象个数

在这里插入图片描述
DataFrame常用属性:

  • values:返回Series对象所有元素
  • index:返回索引
  • dtypes:返回数据类型
  • shape:返回series数据形状
  • ndim:返回对象的维度
  • size:返回对象个数
  • columns:返回列标签
import numpy as np
import pandas as pd

# 创建Series
series1 = pd.Series([2.8, 3.01, 8.99, 8.59, 5.18], index=['a', 'b', 'c', 'd', 'e'], name='this is a series')
series2 = pd.Series(np.array([2.8, 3.01, 8.99, 8.59, 5.18]), index=['a', 'b', 'c', 'd', 'e'], name='this is a series')

series3 = pd.Series({'北京': 2.8, '上海': 1.8, '深圳': 3.8})
series3.values
series3.index
series3.ndim
series3[0:3]
series3['北京':'深圳']

series4 = pd.Series({'四川': 4.8, '重庆': 5.8})
series3 = series3.append(series4)
series3['北京'] = 2.56

series3.drop('四川', inplace=True)  # 加上inplace=True,就会对原数据进行改变
series3.drop(['上海', '北京'], inplace=True)

# 创建DataFrame(python中的list是python的内置数据类型,list中的数据类不必相同的,而array的中的类型必须全部相同)
list1 = [['张三', 23, '男'], ['李四', 24, '女'], ['王二', 26, '女']]
df1 = pd.DataFrame(list1, columns=['姓名', '年龄', '性别'])

df2 = pd.DataFrame({'姓名': ['张三', '李四', '王二'], '年龄': [23, 24, 26], '性别': ['男', '女', '女']})

array1 = np.array(list1)
df3 = pd.DataFrame(array1, columns=['姓名', '年龄', '性别'], index=['a', 'b', 'c'])

df3.values
df3.shape
df3.dtypes
df3.columns.tolist()
df3.index.tolist()
df3.ndim
df3.size

(2)数据获取与保存

import pandas as pd
import os

# 读取
df1 = pd.read_csv('路径\文件名', encoding='gbk')

os.chdir('路径')
df2 = pd.read_csv('文件名', encoding='gbk', dtype={'info_id': str, 'emp_id': str}, nrows=10, na_values=70)
df2.head()
df2.tail()
df2.dtypes

df3 = pd.read_excel('文件名', encoding='utf-8', sheet_name='名字')

# 保存
df1.to_csv('文件名', index=False)
df3.to_excel('文件名', index=False)

(3)数据筛选

import pandas as pd
import os

os.getcwd()
os.chdir('路径')
order = pd.read_excel('文件名', encoding='utf-8', sheet_name=0, dtype={'detail_id': str})

order.head(5)
order.tail(5)
order.columns
order.dtypes
order.ndim
order.shape
order.size

order[:10]
order.dishes_name
order['dishes_name']
order['dishes_name'][0:50]
order[['dishes_name', 'logicprn_name']][0:50]

# loc和iloc
# loc[A,B],A、B代表行和列的标签
order.loc[2:5, ['dishes_name', 'logicprn_name']]
order.loc[order['order_id'] == 458, ['order_id', 'dishes_name', 'logicprn_name']]
# iloc[A,B],A、B代表行和列的位置
order.iloc[:, 1:4]
order.iloc[3:7, [2, 3]]

(4)条件查询和增删改查

在这里插入图片描述

import pandas as pd
import os

os.getcwd()
os.chdir('路径')
order = pd.read_excel('文件', encoding='utf-8', sheet_name=0, dtype={'detail_id': str})

# 查
# 条件查询
order[order['order_id'] == 458][['order_id', 'dishes_name']]
# 多重条件查询
order[['order_id', 'dishes_name']][(order['order_id'] == 458) & (order['amounts'] > 3)]
order[['order_id', 'dishes_name']][~(order['order_id'] == 458)]
order[['order_id', 'dishes_name', 'amounts']][order['amounts'].between(10, 30, inclusive=True)]
order[['order_id', 'dishes_name']][order['dishes_name'].isin(['内蒙烤羊腿', '大蒜'])]
order[['order_id', 'dishes_name']][order['dishes_name'].str.contains('烤')]

# 增
order['payment'] = order['amounts'] * order['counts']
order['payway'] = '现金支付'

# 删
order.drop('payway', axis=1, inplace=True)
order.drop(['payway', 'payment'], axis=1, inplace=True)
del order['payway']

order.drop(labels=(3, 4), axis=0, inplace=True)

# 改
mid = order['emp_id']
order.drop(['emp_id'], axis=1, inplace=True)
order.insert(0, 'Mid', mid)

order.loc[order['order_id'] == 458, 'order_id'] = 45800
order.rename(columns={'amounts': '金额'}, inplace=True)
order.rename(index={0: '0900'}, inplace=True)

order.describe()
order.describe().loc['count'] == 0

3.2 pandas高级操作

(1)数据库数据的获取和保存

在这里插入图片描述

import pandas as pd
from sqlalchemy import create_engine

# 建立连接
# create_engine('mysql+pymysql://user:passward@IP:3306/test01')
# user(用户名):passward(密码)@IP(IP地址):3306(端口)/test01(数据库名)')
conn = create_engine('mysql+pymysql://root:ly200689081@localhost:3306/test01')
sql = 'select * from meal_order_info'
df1 = pd.read_sql(sql, conn)

def query(table):
    host = 'localhost'
    user = 'root'
    passward = 'ly200689081'
    database = 'test01'
    port = 3306
    conn = create_engine('mysql+pymysql://{}:{}@{}:{}/{}'.format(user, passward, host, port, database))
    sql = 'select * from ' + str(table)
    results = pd.read_sql(sql, conn)
    return results

df2 = query('appendix')

# 保存到数据库
import os

os.chdir('路径')
df = pd.read_csv('文件名')
conn = create_engine('mysql+pymysql://root:ly200689081@localhost:3306/test01')
try:
    df.to_sql('testdf', con=conn, index=False, if_exists='replace')
except:
    print('error')

(2)数据整合

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import pandas as pd

# 左右连接
merge = pd.merge(left=df1, right=df2, how='left', left_on='id', right_on='Id')
merge = pd.merge(left=df1, right=df2, how='right', left_on='id', right_on='Id')
# 全连接
merge = pd.merge(left=df1, right=df2, how='outer', left_on='id', right_on='Id')
# 内连接
merge = pd.merge(left=df1, right=df2, how='inner', left_on='id', right_on='Id')
# 按照索引合并(不常用)
merge = pd.merge(left=df1, right=df2, how='inner', left_index=True, right_index=True)

(3)层次化索引

在这里插入图片描述

import pandas as pd

order = pd.read_excel('路径', header=0, sheet_name=0, encoding='gbk', index_col=[0, 1])
order.loc[2956, 2958]
order.loc[(2956, 2958), :]
order.loc[(2956, [417, 1049]), :]
order.loc[(2956, 2958), ['dishes_id', 'logicprn_name']]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值