学习笔记2
pandas
引用方法:import pandas as pd
1、一维数据对象:Series(列表和字典的结合体)
创建方式:pd.Series(list/array, index=['a','b',...])
例子
pd.Series([2,3,4,5],index=['a','b','c','d'])
输出
a 2
b 3
c 4
d 5
dtype: int64
支持数组的特性:
1、从ndarray创建Series
2、与标量运算
3、两个Series的运算:sr1+sr2(按照标签相加)
4、索引:sr[0],sr[[1,2,4]]
5、切片:sr[0:4]
6、通用函数:np.abs(sr)
7、布尔值过滤:sr[sr>5]
支持字典的特性:
1、从字典创建Series:pd.Series(dic)
2、in 运算:‘a’ in sr
3、键索引:sr['a']、sr[['a','b','c']]
sr.index:返回sr的键和类型
sr.values:返回sr的值
例子
sr = pd.Series({'a':1,'b':2})
print(sr.index)
print(sr.values)
输出
Index(['a', 'b'], dtype='object')
[1 2]
由于Series自带下表索引,当下标索引和标签索引重复时,默认为标签索引。为了避免混乱:
sr.loc[10]:选取标签为10的元素
sr.iloc[10]:选取下标为10的元素
例子
sr = pd.Series(np.arange(10,21),index=np.arange(10,21))
print(sr)
print(sr[10])
print(sr.loc[10])
print(sr.iloc[10])
输出
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
dtype: int64
10
10
20
两个Series的运算
例子
sr1 = pd.Series([12,23,34],index=['c','a','d'])
sr2 = pd.Series([11,20,10],index=['b','c','a'])
print(sr1+sr2)
输出
a 33.0
b NaN
c 32.0
d NaN
dtype: float64
或者使用函数 add,sub,div,mul
例子
sr1.add(sr2,fill_value=0) #不改变sr1和sr2
输出
a 33.0
b 11.0
c 32.0
d 34.0
dtype: float64
缺失值处理
sr.isnull():返回一个Series,nan处返回True,否则返回False
sr.notnull():与isnull相反
sr.dropna():返回一个Series,扔掉缺失值
sr.fillna(10):返回一个Series,将所有nan变为10
2、二维数据对象:DataFrame
创建方式:
pd.DataFrame(dic/Series)
pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3,4],index=['b','a','c','d'])})
常用属性:df.xxx
index:获取行索引
columns:获取列索引
T:转置
values:获取值
describe():获取快速统计
insert(列位置,列标签,值列表):插入一行数据
dtypes:获取数据类型
size:获取大小
shape:获取形状
ndim:获取列数
axes:获取行、列标签
mean(axis=0):求平均值
sum:求和
sort_values(by=列标签,ascending=True,axis=0):按照某一行排列,ascending为False时降序排列,axis=1时按照列排序。by不可省略,其他可以。nan默认在最后(不管是升序还是降序)
sort_index(by=...):按照标签的ASCII值排序
drop():删除行或列
rename(columns = {'one':'first','two':'second'},inplace = True):对行或列标签重命名
索引
df.loc[行,列]:按照标签索引
数据对齐
按照标签运算,要是有一个值为nan,计算出来的值也为nan,处理方法和Series大部分相同。
不同之处:
df.dropna():删除含有nan的一行
df.dropna(how='all'):只删除所有元素都是nan的行
df.dropna(axis=1):删除含有nan的所有列
df.dropna(subset=列列表):删除含有nan的指定列
3、时间处理:to_datatime
时间对象就是以时间序列为索引的Series或DataFrame
时间序列类型
时间戳:特定时刻
固定时期
时间间隔
pd.to_datetime(['2001-01-01','2010/Feb/02']):传入一个时间字符串列表/数组,转化为DatetimeIndex,作为时间索引,在Series或DataFrame中通常作为索引存在
pd.date_range(start,end,periods=n,freq):传出一个DatetimeIndex,可以从start至end,或从start开始往后periods个时间,再指定freq(频率)=‘H’(our),'W'(eek),'B'(usiness),'S'(emi-)'M'(onth),(min)'T'(es),'S'(econd),'A'(year),默认为'D'(ay)
dt.pydatetime():将DatetimeIndex转化为一个datetime对象
例子1
dt = pd.date_range(end='2021-01-01',periods=10,freq='B')
print(dt[0].to_pydatetime())
输出
2020-12-21 00:00:00
例子2
sr = pd.Series(np.arange(5),index=pd.date_range('2017-01-30',periods = 5))
print(sr)
输出
2017-01-30 0
2017-01-31 1
2017-02-01 2
2017-02-02 3
2017-02-03 4
Freq: D, dtype: int64
sr.index
输出
DatetimeIndex(['2017-01-30', '2017-01-31', '2017-02-01', '2017-02-02','2017-02-03'], dtype='datetime64[ns]', freq='D')
索引
sr['2017-01']:切出2017年1月的数据
sr['2017-01':'2018-03-05']:切出2017年1月至2018年3月5日的数据(前包后包)
例子
sr['2017-01'] #按照月份切出
输出
2017-01-30 0
2017-01-31 1
Freq: D, dtype: int64
属性
resample(freq).sum()/mean():按照freq求总和、平均等
truncate(before,after):切出before后的数据或after前的数据(包括before或after)
4、文件处理:支持json,XML,HTML,数据库,pickle,excel等文件类型
读入文件:read_csv('test.csv',index_col,parse_date,header,names):
读取test.csv文件
index_col='date':将'date'作为索引
parse_date='date':将'date'列中所有能转化成时间对象的转化为时间对象,若parse_date=True,则操作对象为整个表
header=None:自动创建列名
names=['a','b','c']:指定列名
sep:指定分隔符
skip_row:跳过指定行
na_values:指定某些字符为缺失值
读入文件read_table():分隔符为制表符
写入文件to_csv:
sep
na_rep:与na_values相反,将指定缺失值转化为字符串
header:=False不输出列名
index:=False不输出行索引
columns:输出指定列,传入列表
处理excel文件需要另外装xlrd库
8928

被折叠的 条评论
为什么被折叠?



