Pandas

安装

pip install pandas

import pandas as pd

Series

类似于一维数组的对象,由一组数据和一组与之相关的数据标签(索引)组成,这里的索引都是行索引

创建方式

  • pd.Series([4,7,-5,3]),列表或者数组都行
  • pd.Series([4,7,-5,3],index=['a','b','c','d']) 设置索引标签
  • pd.Series(
  • pd.Series(0,index=['a','b','c','d'])

获取值数组和索引数组:values属性和index属性

比较像数组和字典的结合体

使用特性

  • 运算和numpy的array是一样的
  • 切片和列表一样,可以通过索引标签来切片
  • 支持numpy的通用函数
  • 支持布尔索引
  • 可以使用字典创建Series对象
  • 遍历打印的是值而不是键,这是和dict的区别

整数索引

sr = pd.Series(np.arange(20))
sr2 = sr[10:].copy() 
>> 10	10
11	11
12	12
13	13
14	14
15	15
16	16
17	17
18	18
19	19
sr2.loc[10]	# 以标签为整数10作为索引
>> 10
sr2.iloc[10]	# 以整数下标10作为索引
>> 19

注意:下标和标签是不一样的,所以使用整数作为索引要使用iloc

数据对齐

pandas在进行两个Series对象的运算时,会按索引标签进行对其然后计算,一般index是去重的

sr1 = pd.Series([1,2,3],index=['c','a','d'])
sr2 = pd.Series([4,5,6,9],index=['d','c','a','b'])
sr1 + sr2
>>
a 	8	# 2+6
b	NaN
c	6	# 1+5
d	7	# 4+3
sr1.add(sr2,fill_vlue=0)
a 	8	
b	9	# 9+0
c	6	
d	7	

缺失数据处理

  1. 删掉缺失数据:
    1. sr.[sr.notnull()]
    2. sr.dropna()
  2. 为缺失数据赋值0
    1. sr.fillna(0)
    2. 若想保存则sr = sr.fillna(0)
  3. 为缺失数据赋值平均数
    1. sr.fillna(sr.mean())

DataFrame

是一个表格型的数据结构,含有一组有序的列。可以看作是由Series组成的字典,并且共用一个索引

创建方式

  1. pd.DataFrame({'one':[1,2,3],'two':[2,3,4]})
  2. pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([2,3,4,5],index=['a','b','c','d'])})
  3. 此处key对应的是列名,index对应的是行的索引

csv文件读取与写入

  1. df.read_csv('file_nam.csv')
  2. df.to_csv()
    1. 注意to_csv()之后再read_csv()会在最左侧多出Unnamed列,若想忽略他则read_csv(index=0)

常用属性

属性 描述
index 获取行索引,RangeIndex对象
T 转置
columns 获取列索引
values 获取值数组
describe() 获取快速统计

索引和切片

  • df.loc['行索引','列索引']
  • df.iloc['行索引','列索引']
  • df.loc[花式索引,切片]
    • 例如:df.loc[['a','c'],:],只选择a行和c行

不要用两个中括号来索引

数据对齐

  • 在运算时,会进行数据对齐,其行索引和列索引分别对齐

缺失数据处理

  • dropna(axis=0,where='any',...)
    • df.dropna(how='all'):这一行的值全为空则删除
    • axis=0,是竖轴,删行;axis=1,是横轴,删列
  • fillna()
  • isnull()
  • notnull()

其他常用方法

方法 描述
mean() axis=0,按列求平均值;axis=1,按行求平均值
sum() 求和
sort_index() 索引排序,有缺失值的排最后
sort_values(by='',ascending=true) 值排序,有缺失值的排最后
Numpy的通用函数

时间对象

  • import dateutil
    • dateutil.parser.parse('02/03/2001')
  • pd.to_datetime(['2001-01-01','2010/Feb/02']):转成DatetimeIndex对象

时间对象生成

  • pd.date_range()
    • start:开始使劲按
    • end:结束时间
    • periods:长度
    • freq:频率,默认'D'
      • H:hour
      • B:business
      • SM:semi month,半个月
      • T:minutes
      • S:second
      • W-Mon:每周一
      • 1h20:每1小时20分钟
      • A:年

时间序列

以时间对象为索引的Series或DataFrame

例如:sr = pd.Series(np.arange(1000),index=pd.date_range('2021-01-01',periods=1000))

datetime对象作为索引时存储在Datetimeimdex对象中

特殊功能:

  • 传入”年“或”年-月“作为切片
  • 传入日期范围作为切片方式
  • 丰富的函数支持:resample(),truncate()...
    • sr.resample('M').sum():求每月的和

文件处理

常用文件格式:csv

读取文件

pandas读取文件:从文件名、URL、文件对象中加载数据

  • read_csv 默认分隔符为逗号
    • pd.read_csv('file_name.csv',index_col='date',parse_dates=True):指定date列变成时间对象
    • 会默认把第一行作为列名
  • read_table 默认分隔符为制表符
  • 主要参数
    • sep:指定分隔符
    • header:指定文件无列名
    • name:指定列名
    • index_col:指定某列作为所引
    • skip_row:指定跳过某些行
    • na_values:指定某些字符串表示缺失值
    • parse_dates:指定某些列是否被解析为日期,类型为布尔值或列表
  • 还有:read_json(),read_html(),read_excel(),read_sql()
    • read_excel()需要安装xlrd的包

写入文件

写入到csv文件:to_csv函数

主要参数:

  • sep:指定分隔符
  • header=False:不输出列名行
  • index=False:不输出行索引列
  • na_rep:指定缺失值转换的字符串,默认为空字符串
  • columns:指定输出的列,传入列表

还有:to_json(),to_html(),to_excel(),to_sql()

posted @ 2021-12-08 20:55  注入灵魂  阅读(66)  评论(0)    收藏  举报