day5-Pandas基础

1.Pandas介绍

官网:http://pandas.pydata.org/
Pandas官网
Pandas是一个强大的分析结构化数据的工具集,基于NumPy构
建,提供了高级数据结构数据操作工具,它是使Python成为强大
而高效的数据分析环境的重要因素之一。

  • 一个强大的分析和操作大型结构化数据集所需的工具集
  • 基础是NumPy,提供了高性能矩阵的运算
  • 提供了大量能够快速便捷地处理数据的函数和方法
  • 应用于数据挖掘,数据分析
  • 提供数据清洗功能

2.数据读取与存储

我们的数据大部分存在于文件当中,所以pandas会支持复杂的IO
操作,pandas的API支持众多的文件格式,如CSV、SQL、XLS、
JSON、HDF5。

2.1 CSV

2.1.1read_csv

Signature:
pd.read_csv(
filepath_or_buffer: ‘FilePath | ReadCsvBuffer[bytes] | ReadCsvBuffer[str]’,
*,
sep: ‘str | None | lib.NoDefault’ = <no_default>,
delimiter: ‘str | None | lib.NoDefault’ = None,
names: ‘Sequence[Hashable] | None | lib.NoDefault’ = <no_default>,
index_col: ‘IndexLabel | Literal[False] | None’ = None,
usecols: ‘list[HashableT] | Callable[[Hashable], bool] | None’ = None,
dtype: ‘DtypeArg | None’ = None,
encoding:‘utf-8’
)

# 打开一个文件
df=pd.read_csv(
    './data/stock_day.csv',
    sep=',',
    encoding='utf-8',
    #usecols=[3,6],  # 读取指定的列,第三列,第六列
    usecols=['high','low'],
    engine='c' #指定读取的引擎,速度快,兼容性相对不好
              )
df

在这里插入图片描述

2.1.2 to_csv
# 保存用 数据对象.to...
df.to_csv(
    './data/csv文件的保存.csv',
    index=False,   # index=False 保存的时候不设置索引
    columns=['high']  # 指定保存的列

)

在这里插入图片描述

2.2 JSON

2.2.1 pandas.read_json介绍

JSON是我们常用的一种数据交换格式,前面在前后端的交互经常用到,也会在存储的时候选择这种格式。所以我们需要知道Pandas如何进行读取和存储JSON格式。
pandas.read_json(path_or_buf=None, orient=None, typ='frame', lines=False)

  • 将JSON格式准换成默认的Pandas DataFrame格式

  • orient : string,Indication of expected JSON string format.

    orient: string,表示期望的JSON字符串格式。

    • ‘split’ : dict like {index -> [index], columns -> [columns], data -> [values]}

      • split 将索引总结到索引,列名到列名,数据到数据。将三部分都分开了
    • ‘records’ : list like [{column -> value}, … , {column -> value}]

      • records 以columns:values的形式输出
    • ‘index’ : dict like {index -> {column -> value}}

      • index 以index:{columns:values}...的形式输出
    • ‘columns’ : dict like {column -> {index -> value}}

      ,默认该格式

      • colums 以columns:{index:values}的形式输出
  • lines : boolean, default False

    • 按照每行读取json对象
  • typ : default ‘frame’, 指定转换成的对象类型series或者dataframe

2.2.2 案例

读取json文件

df=pd.read_json('./data/info-records.json',encoding='utf-8')
df

在这里插入图片描述

df.to_json(
    './data/info-split1.json',
    orient='split'
    # 我们发现数据是unicode编码保存
)

在这里插入图片描述

df.to_json(
    './data/info-split2.json',
    orient='split',
    force_ascii=False  # 默认会使用Unicode编码保存, force_ascii=False 不使用默认编码
)

在这里插入图片描述

"""读取split类型json文件"""
df2 = pd.read_json(
    './data/info-split2.json',
    orient='split'
)
df2  # 当保存json的时候指定了json文件类型, 那么在读取的时候也要指定类型读取

在这里插入图片描述

"""HDF文件操作"""
day_close=pd.read_hdf('./data/day_close.h5')
day_close

在这里插入图片描述

day_close.to_hdf('./data/test1.h5',key='aaa')  
#必须指定key,aaa是加密的一种,以二进制保存

3.Excel文件操作

可能错误 Missing optional dependency ‘openpyxl’. Use pip or conda to install openpyxl.
原因是缺少依赖模块 --> pip install openpyxl

# sheet_name 指定读取表的名字
df = pd.read_excel('./data/网易新闻.xlsx', sheet_name='表1')  # 如果工作簿中有多张表, 没有指定读取哪张, 默认就是第一张表
df

#  usecols 指定读取表格列
df = pd.read_excel('./data/网易新闻.xlsx', sheet_name='表1', usecols=['标题', '类别', '新闻来源'])  
# 如果工作簿中有多张表, 没有指定读取哪张, 默认就是第一张表
df

在这里插入图片描述

df = pd.read_excel('./data/网易新闻.xlsx', 
                   sheet_name='表1', 
                   usecols=['标题', '类别', '新闻来源'],
                  skiprows=[1, 3], # 忽略行读取, 可以跳行读取
                   nrows=10  # 指定读取的行数
                  )  
df

在这里插入图片描述

4.pandas数据结构

4.1Series

Series是一个类似于一维数组的数据结构,它能够保存任何类型的数据,比如整数、字符串、浮点数等,主要由一组数据和与之相关的索引两部分构成。

pd.Series(
    data=None,
    index=None,
    dtype: 'Dtype | None' = None,
    name=None,
    copy: 'bool | None' = None,
    fastpath: 'bool' = False,
)
pd.Series(
    data=['a', 'b', 'c', 'd', 'e']  # 指定数据, 默认会用自然数作为行索引
)

series_1 = pd.Series(
                    data=['a','b','c','e'],
                    index=['f','g','h','i'], # 指定行索引
                    dtype=str
)
series_1

series_1['h']  # Series对象是根据行索引取值

在这里插入图片描述

"""通过字典构建Series"""
series_2 = pd.Series(data={'red': 100, 'blue': 200, 'green': 300, 'gray': 400})
series_2

"""Series对象属性和方法"""
print('取Series行索引:', series_2.index)
print('取Series数据:', series_2.values)
print('统计Series数据中不重复的数据个数:\n', series_2.value_counts())

在这里插入图片描述

5.DataFrame

在这里插入图片描述

arr = [[92, 55, 78, 50, 50],
       [71, 76, 50, 48, 96],
       [45, 84, 78, 51, 68],
       [81, 91, 56, 54, 76],
       [86, 66, 77, 67, 95],
       [46, 86, 56, 61, 99],
       [46, 95, 44, 46, 56],
       [80, 50, 45, 65, 57],
       [41, 93, 90, 41, 97],
       [65, 83, 57, 57, 40]]
#DataFrame 既有行索引也有列索引, 默认是从0开始的自然数

在这里插入图片描述

df = pd.DataFrame(
    data=arr,
    index=[f"同学{i}" for i in range(1, 11)], # 指定行索引
    columns=['语文', '数学', '英语', '政治', '体育']  # 指定列索引
)
df
df['语文']  #单独取一列
df[['数学', '英语']]

# 单独取一个数据, 先列再行
df['语文']['同学4']

print('形状(shape): \t', df.shape)
print('取行索引(index): \t', df.index)
print('取列索引(columns): \t', df.columns)

print('取数据(values): \n', df.values)
print('转置(T): \n', df.T)

print('取头部数据(head): \n', df.head(2))
print('取尾部数据(head): \n', df.tail(3))

在这里插入图片描述

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

6.索引操作

df = pd.DataFrame(
    data={'year': [2012, 2013, 2014, 2015],
         'shop': ['天上人间', '天之道', '沐林足浴', '浴皇大帝'],
         'sale': [55, 40, 84, 99]}
)
df

6.1设置索引

# 基于数据列设置行索引
# 对于原有的对象不会产生修改
df2 = df.set_index('year')
df2

# 还原索引
df2.reset_index()  

6.2索引的切片和取值

df = pd.read_csv('./data/stock_day.csv', encoding='utf-8')
df

# 不需要 'ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v_ma20', 'turnover' 列数据

# 1. 在读取时候使用 usecols
# 2. df对象[[]]  取多列
# 3. drop 方法, 默认是根据数据行删除数据
#    默认 axis=0 是操作数据行, 如果axis=1, 就可以删除列 
df.drop(['ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v_ma20', 'turnover'], 
        axis=1,
        inplace=True,  # 基于源数据做修改, 在很多方法里面有有此参数
       )

df

在这里插入图片描述

  • 索引切片操作
    • loc 根据索引的名字进行切片取值
    • iloc 根据数字索引进行切片取值

“”“切片(loc)”“”

# 切片是先行再列
# 在DataFrame中根据索引名字切片的作用域是闭区间
df2.loc['二': '三', 'Unnamed: 0': 'volume']

"""loc 与 iloc 组合使用"""

# df2.index 取行索引对象
df2.loc[df2.index[1:3], 'Unnamed: 0': 'volume']


"""loc 与 iloc 组合使用"""

# get_indexer 将索引的名字转化成数字
df2.iloc[1:3, df2.columns.get_indexer(df2.columns[:6])]

在这里插入图片描述
数据文件放在gitte了,路径是python-data-analysis/ day5
https://gitee.com/jiangxun07/python-data-analysis.git
day5-pandas源代码

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值