pandas中的DataFrame数据结构
pd.DataFrame()
DataFrame 是一种二维的数据模型,相当于EXcel表格中的数据,有横竖两种坐标,横轴用columns,竖轴用index 来确定,在建立DataFrame 对象的时候,需要确定三个元素:数据,竖轴,横轴。
DataFrame既有行索引也有列索引,
1. 设置索引index
a.index = a['x'] print(a) //可新建一个DataFrame,index设置为别的表格index labels = pd.DataFrame(columns=['s','x'],index=a.index) print(labels)2. a.iloc[行位置,列位置]
通过默认生成的数字索引查询指定的数据
下面表格说明:
- i值里的数字可以为正数也可以为负数,正数0代表第一行,1代表第2行;负数 -1代表倒数第一行,-2代表倒数第2行
| a.iloc[i] | i值可以是数字也可以是一个数组,获取第i行数据或者行子集 |
| a.iloc[:,j] | j值可以是数字也可以是一个数组, 获取第j列数据或者列子集 |
| a.iloc[i,j] | 获取第i行第j列的值 |
1. a.iloc[i] 获取第i行数据或者行子集
print(a) print(a.iloc[0]) #获取第一行数据 print(a.iloc[:2]) #获取第一行和第二行 print(a.iloc[1:]) #获取第二行到最后一行的数据 print(a.iloc[[0,-1]]) #获取第一行和倒数第一行数据2. a.iloc[:,j] 获取第j列数据或者列子集
print(a.iloc(:,0) #获取第0列数据 print(a.iloc[:,[0,1]]) #获取第一列和第二列数据 print(a.iloc[:,:2]) #获取第一列和第2列3. a.iloc[i,j] 获取第i行第j列的值
print.iloc(-1,0) #获取倒数第一行第一列数据,即 12 print(a.iloc[1,[0,1]]) #获取第2行,第一二列数据 print(a.iloc[[0,1],2]) #获取第一二行第3列数据 print(a.iloc[[0,1],[1,2]]) #获取第一二行的第二三列数据3. 将Pandas中的DataFrame类型转换成Numpy中array类
在用pandas包和numpy包对数据进行分析和计算时,经常用到DataFrame和array类型的数据。在对DataFrame类型的数据进行处理时,需要将其转换成array类型
1.a.values
import numpy as np import pandas as pdprint(a.values) print(a['w'].values)2.使用numpy中的array方法
print(np.array(a)) print(np.array(a['w']))4. pandas使用sort_index排序
DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’, sort_remaining=True, ignore_index=False, key=None)[source]
sort_index文档
axis:0按照行名排序;1按照列名排序
level:默认None,否则按照给定的level顺序排列—貌似并不是,文档
ascending:默认True升序排列;False降序排列
inplace:默认False,否则排序之后的数据直接替换原来的数据框
kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。似乎不用太关心。
na_position:缺失值默认排在最后{“first”,“last”}
by:按照某一列或几列数据进行排序,但是by参数貌似不建议使用
3. 对列columns排序
默认axis=0,对行index排序,axis=1对列index排行
5. pandas中的rolling函数用于移动计算
DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None, method=‘single’)
rolling文档
window: 也可以省略不写。表示时间窗的大小,注意有两种形式(int or offset)。如果使用int,则数值表示计算统计量的观测值的数量即向前几个数据。如果是offset类型,表示时间窗的大小。、min_periods:每个窗口最少包含的观测值数量,小于这个值的窗口结果为NA。值可以是int,默认None。offset情况下,默认为1。
center参数,默认为False,表示当前元素往上选,加上本身总共筛选3个。
center参数,默认为True,表示以当前元素为中心,从个方向进行筛选。
win_type: 窗口的类型。截取窗的各种函数。字符串类型,默认为None。各种类型
on: 可选参数。对于dataframe而言,指定要计算滚动窗口的列。值为列名。
axis: int、字符串,默认为0,即对列进行计算
closed:定义区间的开闭,支持int类型的window。对于offset类型默认是左开右闭的即默认为right。可以根据情况指定为left both等。
6.pandas的填充缺失值fillna()
在数据集里面的缺失值需要填充起来,避免各种出错,在做分析的时候,我们经常要将缺失值填充为前一个值,或者是后一个值。
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)[source]
| method | 取值 : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None pad/ffill:用前一个非缺失值去填充该缺失值 backfill/bfill:用下一个非缺失值填充该缺失值 None:指定一个值去替换缺失值(缺省默认这种方式) |
| inplace | False 创建一个副本,修改副本,原对象不变(缺省默认) True 直接修改原对象 |
| axis | 默认是纵向填充的;1是左右横向填充的 |
fillna文档
import pandas as pd import numpy as np from numpy import nan as NaNdf1=pd.DataFrame([[1,2,3],[NaN,NaN,2],[NaN,NaN,NaN],[8,8,NaN]]) print(df1)1.用常数填充
print(df1.fillna(100)) # 将所有NaN替换成1002.用字典填充
print(df1.fillna({0:10,1:20,2:30})) # 将columns为0的所有NaN填充10,为1列的所有NaN填充20,为2列的所有NaN填充303.用前一个非缺失值去填充
print(df1.fillna(method='ffill')) #用前一个非缺失值去填充该缺失值4.用后一个非缺失值去填充
print(df1.fillna(method='bfill')) #用后一个非缺失值去填充该缺失值7.pandas中的where()
where文档
DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None, errors=‘raise’, try_cast=NoDefault.no_default)
cond :条件判断
other: 条件cond为False时,将值替换为other
8. pandas.DataFrame.copy
DataFrame.copy文档
DateFrame.copy(deep=True) :复制object的索引和数据
- 当deep=True时(默认), 会创建一个新的对象进行拷贝. 修改这份拷贝不会对原有对象产生影响.
- 当deep=False时, 新的对象只是原有对象的references. 任何对新对象的改变都会影响到原有对象
上面操作可以看到修改p后a也被修改了,因此我们可以用DateFrame.copy(deep=True) 复制索引和数据。
a = pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz'))# b = pd.DataFrame(np.array([33,11,22,44]),index=list('adbc'),columns=['m']) print(a)p = a.iloc[2:].copy(deep=True) p.index = a.iloc[:2].index p.iloc[:2] = p - 1 print(p) print(a) #此时a没有变化总结
以上是生活随笔为你收集整理的pandas中的DataFrame数据结构的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: window.print()方法,如何获
- 下一篇: np.sort