pandas模块(下)(DataFrame)

概要

  • Series数据操作

  • 基本算术方法

  • 核心数据结构之DataFrame

  • 读取外部数据

  • DataFrame一系列操作


详细

  • Series数据操作

res = pd.Series([111,222,333,444])
# 增加
通过增加新的索引/标签添加新的元素
res['a'] = 123
# 查找
根据索引或者标签定位对应的值
res.loc[1]
# 修改
用赋值符号修改Series指定索引或标签对应的值
res[0] = 1
# 删除
根据索引或者标签删除对应的值
del res[0]

  • 基本算术方法

数据

fill_value参数:将缺失数据用0填充再参与计算。

sr1 = pd.Series([11,22,33], index=['c','a','d'])
sr2 = pd.Series([12,23,34,45], index=['d','c','a','b'])

1、add 加法

sr1.add(sr2)
sr1.add(sr2,fill_value=0)

2、sub 减法

sr1.sub(sr2)
sr1.sub(sr2,fill_value=0)

3、div 除法

sr1.div(sr2)
sr1.div(sr2,fill_value=1)

4、mul 乘法

sr1.mul(sr2)
sr1.mul(sr2,fill_value=1)


  • 核心数据结构之DataFrame

Dataframe创建方式

DataFrame是一种表格型数据结构,相当于二维数组,含有一组有序的列,可以看作由多个Series组成的共用同一组索引的字典。

import numpy as np
import pandas as pd 
# 创建方式
1.pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
2.pd.DataFrame({
    'one':pd.Series([1,2,3],index=['a','b','c']),
    'two':pd.Series([1,2,3],index=['b','a','c'])
})
3.pd.DataFrame(np.array([[10,20],[30,40]]),index=['a','b'],columns=['c1','c2'])
"""
    以上创建方式无需全部熟悉,了解一种即可
    因为工作中Dataframe的数据一般都是来自于读取外部文件数据,而不是自己手动去创建
"""

 

Dataframe常见属性

1.index     行索引/标签
2.columns   列索引/标签
3.T         转置
4.values    值索引
5.describe  快速统计
# 在DataFrame中所有的字符类型数据在查看数据类型的时候都表示成object


 

  • 读取外部数据

# 读取方式
1.读取文本文件和.csv文件数据
pd.read_csv()
2.读取excel表格文件数据
pd.read_excel()
3.读取MySQL表格数据
pd.read_sql()
4.读取页面上table标签内数据
pd.read_html()

读取文本文件

pd.read_csv(filepath_or_buffer, sep=',', header='infer', names=None, usecols=None, skiprows=None, skipfooter=None, converters=None, encoding=None)
# 参数说明
1.filepath_or_buffer:指定文本文件或.csv文件路径
2.sep:指定原数据字段间的分隔符,默认为逗号','
3.header:是否需要将原数据集中的第一行作为表头,默认将第一行作为表头(如果没有表头需要将该参数设置为None)
4.names:如果原数据集中没有表头,可以通过该参数在数据读取时给表格添加具体的表头
5.usecols:筛选需要读取的字段名
6.skiprows:指定数据读取时需要跳过原数据集开头的行数
,一般是文字说明,python能自动过滤掉完全无内容的空行
7.skipfooter:指定数据读取时需要跳过原数据集末尾的行数
8.converters:转换数据类型(以字典的形式指定) 
9.encoding:如果文件中含有中文,有时需要指定字符编码

读取Excel表格

pd.read_excel(io, sheet_name=0, header=0, skiprows=None, skipfooter=0, index_col=None, names=None,na_values=None, thousands=None, convert_float=True)
# 参数说明
1.io:指定Excel表格文件路径 
2.sheet_name:指定需要读取Excel表格文件中的第几个Sheet,既可以传递序号也可以传递具体的Sheet名称 
3.header:是否需要将文件内容的首行用作表头,默认需要 
4.skiprows:指定读取数据时跳过的开始行数
5.skipfooter:指定读取数据时跳过的末尾行数 
6.index_col:指定哪些列用作数据框的行索引(标签)
7.na_values:指定原始数据中哪些特殊值代表了缺失值 
8.thousands:指定原始数据集中的千分位符 
9.convert_float:默认将所有的数值型字段转换为浮点型字段
10.converters:转换某些列的形式(以字典的形式)
eg:
pd.read_excel(r'data_test02.xlsx',header = None,
names = ['ID','Product','Color','Size'], 
converters = {'ID':str})

读取数据库数据

# 需要pymysql模块
import pymysql
conn = pymysql.connect(host,port,user,password, database, charset)
# 参数说明
1.host:指定需要访问的MySQL服务器地址
2.port:指定访问MySQL数据库的端口号 
3.charset:指定读取MySQL数据库的字符集,如果含有中文,一般设置为 “utf8”或“gbk”
4.user:指定访问MySQL数据库的用户名
5.password:指定访问MySQL数据库的密码
6.database:指定访问MySQL数据库的具体库名
eg:
# 直接通过SQL语句读取MySQL数据
pd.read_sql('select * from user', con = conn)
# 避免占用资源,需要关闭链接
conn.close()

读取网页表格

# 直接通过链接即可读取其中所有的table标签内数据
pd.read_html(r'https://baike.baidu.com/item/NBA%E6%80%BB%E5%86%A0%E5%86%9B/2173192?fr=aladdin')


  • DataFrame一系列操作

数据概览

df.columns  # 查看列 
df.index    # 查看行
df.shape    # 行列 
df.dtypes   # 数据类型 
df.head()   # 取头部多条数据,默认五条
df.tail()   # 取尾部多条数据,默认五条

 

行列操作

# 获取该列名对应的数据
df['列字段名']
# 修改列名
df.rename(column={'旧列名':'新列名'})
# 创建新的列
df['新列名']=df.列名称/(df.列名称1+df.列名称2)
# 自定义位置
df.insert(3,'新列名',新数据)
# 添加行
df3 = df1.append(df2)

数据筛选

import pandas as pd
# 获取指定列数据
df['列名']  # 单列数据
df[['列名1','列名2',...]]  # 多列数据
# 获取指定行数据
df=pd.read_excel(r'D:\pythonProject\day34\例题两道\二手房.xlsx', sheet_name=0,skiprows=None, skipfooter=0, index_col=None, names=None,na_values=None, thousands=None, convert_float=True)
df.loc[df["区域名称"] == '  淞宝 ']
df.loc[(df["区域名称"] == '  淞宝 ') & (df['总价(万元)'] > 200),]
df.loc[(df["区域名称"] == '  淞宝 ') & (df['总价(万元)'] > 200),['name','tot_amt','price_unit']]

数据处理

sec_car = pd.read_csv(r'sec_cars.csv')
sec_car.head()
sec_car.dtypes
# 更改数据类型
sec_car.Boarding_time = pd.to_datetime(sec_car.Boarding_time, format = '%Y年%m月')
sec_car.New_price = sec_car.New_price.str[:-1].astype(float)

 

posted @ 2021-10-16 12:21  Leguan001  阅读(61)  评论(0)    收藏  举报