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({'a':1,'b':2}
- pd.Series(0,index=['a','b','c','d'])
比较像数组和字典的结合体
使用特性
- 运算和numpy的array是一样的
- 切片和列表一样,可以通过索引标签来切片
- 支持numpy的通用函数
- 支持布尔索引
- 可以使用字典创建Series对象
- 遍历打印的是值而不是键,这是和dict的区别
sr = Series(np.range(20)) sr2 = sr[10:].copy() >> 1010 1111 1212 1313 1414 1515 1616 1717 1818 1919 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 >> a8# 2+6 bNaN c6# 1+5 d7# 4+3 sr1.add(sr2,fill_vlue=0) a8 b9# 9+0 c6 d7
缺失数据处理
- 删掉缺失数据:
- sr.[sr.notnull()]
- sr.dropna()
- sr.[sr.notnull()]
- 为缺失数据赋值0
- sr.fillna(0)
- 若想保存则sr = sr.fillna(0)
- sr.fillna(0)
- 为缺失数据赋值平均数
- sr.fillna(sr.mean())
- sr.fillna(sr.mean())
创建方式
- pd.DataFrame({'one':[1,2,3],'two':[2,3,4]})
- pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([2,3,4,5],index=['a','b','c','d'])})
- df.read_csv('file_nam.csv')
- df.to_csv()
属性 | 描述 |
---|---|
index | 获取索引 |
T | 转置 |
columns | 获取列索引 |
values | 获取值数组 |
describe() | 获取快速统计 |
- df.loc['行索引','列索引']
- df.iloc['行索引','列索引']
- df.loc[花式索引,切片]
- 例如:df.[['a','c'],:]
- 例如:df.[['a','c'],:]
数据对齐
- 在运算时,会进行数据对其,其行索引和列索引分别对其
- dropna(axis=0,where='any',...)
- df.dropna(how='all'):这一行的值全为空则删除
- axis=0,是竖轴,删行;axis=1,是横轴,删列
- df.dropna(how='all'):这一行的值全为空则删除
- 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')
- 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分钟
- H:hour
- start:开始使劲按
以时间对象为索引的Series或DataFrame
例如:sr = pd.Series(np.arange(1000),index=pd.date_range('2021-01-01',periods=1000))
datetime对象作为索引时存储在Datetimeimdex对象中
特殊功能:
- 【Pandas】传入”年“或”年-月“作为切片
- 传入日期范围作为切片方式
- 丰富的函数支持:resample(),truncate()...
- sr.resample('M').sum():求每月的和
- sr.resample('M').sum():求每月的和
读取文件
pandas读取文件:从文件名、URL、文件对象中加载数据
- read_csv 默认分隔符为逗号
- pd.read_csv('file_name.csv',index_col='date',parse_dates=True):指定date列变成时间对象
- 会默认把第一行作为列名
- 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:指定某些列是否被解析为日期,类型为布尔值或列表
- sep:指定分隔符
- 还有:read_json(),read_html(),read_excel(),read_sql()
- read_excel()需要安装xlrd的包
- read_excel()需要安装xlrd的包
写入到csv文件:to_csv函数
主要参数:
- sep:指定分隔符
- header=False:不输出列名行
- index=False:不输出行索引列
- na_rep:指定缺失值转换的字符串,默认为空字符串
- columns:指定输出的列,传入列表