两个数据结构: Series 和 DataFrame
Series
一维数组
obj.values 获取值
obj.index 获取索引
obj['索引'] 获取一个值 obj[[索引1,索引2,索引3...]] 获取多个值
做运算时会保留索引值
将字典转换为Series数组:
如果数据被存放到一个字典里,dict1
Sdict = pd.Series(dict1) key会是索引,value是值
重新设置索引:obj2 = pd.Series(Sdict ,index=[一个其他索引列表])
索引会以其他列表的内容来显示,如果这个索引没找到原值,则显示NaN
如果原先的值在心列表里没有对应的索引,则不会显示
pd.isnull(obj) 输出布尔数组:有NaN或者缺失的会显示True 或写法:obj.isnull()
pd,notnull(obj) 输出布尔数组,不是空的会显示True
name属性
obj.name = ' ' 对value列赋名
obj.index.name = ' ' 对索引列赋名
重新设置索引 obj.index = [索引列表]
DataFrame
表格型的数据结构,既有行索引也有列索引,相当于用Series组成的字典
frame.head( ) 选取前五行数据
按照指定的列名排序
pd.DataFrame(data, columns=['year', 'state', 'pop'])
如果新的索引没有值,就会用NaN补足
显示列名: frame.columns
索引某一列: frame['列名']
frame.列名 这个列名必须得是一个合理的Python变量名才能用
loc属性
frame.loc['索引名'] = 数据 数据这里可以直接赋标量
如果赋值的是一个数组,要求长度一样,索引一样(按照索引匹配)
a==b两个数组做判断输出的会是一个布尔数组
删除
del frame['列名']
将嵌套字典传递给DataFrame:
外层字典的键作为列,内层作为行索引
转置: frame.T
索引对象
负责管理轴标签,轴名称等其他 元数据
构建Series或者DataFrame时,生成的索引会自动转换成一个Index
索引是不可变的,不能修改 可以排序 索引可以传递
pandas的index可以包含重复的标签
基本功能
重新索引
obj2 = obj.reindex([新索引的列表]) columns=列表
新索引中如果有obj不存在的索引,对应的obj2为nan
这个办法可以修改索引和列名排序,只传递一个序列时,会重新索引结果的行
丢弃指定轴上的项
new_obj = obj.drop('索引') 单个索引
new_obj = obj.drop(['索引1','索引2'...]) 多个索引
以上默认按照行标签 也就是axis=0,可省略
若要按照列标签:则axis=1,或axis='columns'传递一下参数
如果drop(列名, inplace=True) 这个参数会销毁所有被删除的数据
索引,选取和过滤
如果索引不是整数,被命名成了新的索引,也可以通过默认索引0,1,2...来获取的
利用标签的切片(与python不同:前闭后开).是包含末端的 [1:3] 结果是包含3的
获取多行/多列
frame[[索引1(或列1),索引2(或列2)...]]
利用布尔型数组来选取数据 data[data>5] = 6 先选取,再赋值
使用loc(轴标签)或iloc(整数索引)来选取
data.loc[['行索引1','行索引2'] , ['列名1','列名2']]
data.iloc[[2,3],[3,0,1]] 选择第3,4行的第4,1,2列 (重新排序)
loc[行名] loc[ : ,列名]
切片也可以,多行(或多列)中间用冒号,或者省略其中一个
选择单一的标量:data.at[行名,列名] 或 data.iat[行,列] 这里是索引(整数)
注意最后的get_value(行标签) 如果存在,则返回值,如果不存在则返回None
跟loc不一样的是...loc选取不存在的列会报错
注意:不晓得为什么会报错...
整数索引
对Series索引的时候
1.如果没有设置索引,只有默认索引,不能用负数索引 data[-1]这是不可以的
2.如果设置了非整数索引,则可以使用data[-1]
算术运算和数据对齐
不同dataframe之间运算,对于结果:只会计算相同索引,不同的索引后面的值会变成NaN
在算术方法中填充值
df1.add(df2, fill_value=0) # df1 df2按照索引相加,索引不重复的保留原值
1/df1 和 df1.rdiv(1) 是等价的
DataFrame和Series之间的运算
注意: DataFrame和Series的所有操作,会广播
具体为:将Series的索引匹配到DataFrame的列,沿着行一直向下广播
如果某个索引值在DataFrame的列或Series的索引中找不到,则参与运算的两个对象就会被重新索引以形成并集
函数应用和映射
NumPy的ufuncs(元素级数组方法)也可用于操作pandas对象
诸如abs这种基础函数:np.abs(frame)
DateFrame 的apply方法:将函数应用到由各列或行所形成的一维数组上(不常用)
例如: frame.apply(f) f表示函数,apply里面可以传递参数axis = 'columns'
如果想得到frame中各个浮点值的格式化字符串,使用applymap即可
frame.applymap(格式化函数)
format = lambda x: '%.2f' % x
frame.applymap(format)
排序(sort_index)和排名(sort_values)
1.obj.sort_index( ) 默认按照行轴axis=0 按照列名排序axis=1
按照索引排序 默认升序排序 想降序排序可以写成ascending=False
2.obj.sort_values( ) 缺失值会被放到Series的末尾
按照值排序 按照单列的值排序:参数为 by='列名'
按照多列的值排序:参数为 by=['列名1','列名2',...]
3.obj.rank( )
默认情况:通过“为各组分配一个平均排名”的方式破坏平级关系
参数 method='first'表示:根据值在原数据中出现的顺序给出排名
默认升序排序 想降序排序可以写成ascending=False
dataframe中可以指定轴 axis=0,1,2...
带有重复标签的轴索引
obj.index.is_unique 判断索引是否唯一
汇总和计算描述统计
pandas对象拥有一组常用的数学和统计方法,例如(sum和mean)都是基于没有缺失数据的假设构建的.
例如:sum计算时会进行求和运算,NA会自动排除
相关系数与协方差
唯一值、值计数以及成员资格
Series uniques = obj.unique( ) 获取唯一值
对结果进行排序 uniques.sort()
计算Series中各值出现的频率: obj.value_counts( ) 默认按照降序排序
一个顶级的pandas办法(可以适用于所有数组和序列):
pd.value_counts(obj.values,sort=False)
计算所有值的计数,结果按照降序
isin用于判断矢量化集合的成员资格: new_data = obj.isin(['值1','值2'...]) 结果为bool数组