python 模块 pandas 数组处理
文章目录
python 模块 pandas 数组处理
1. pandas介绍
2. 方法
2.1 Series
2.1.1 传递list对象创建一个 Series
2.1.2 传递numpy array时间索引以及列标签来创建DataFrame
2.1.3 传递被转换成类似序列结构的字典对象来创建DataFrame
2.2 查看数据
2.2.1 查看frame中头部和尾部的行
2.2.2 显示索引、列和底层的numpy数据。
2.2.3 describe()函数对数据快速的统计汇总:
2.2.4 对数据的转置,按轴进行排序,按值进行排序
2.3 选择
2.3.1 选择一个单独的列,这将会返回一个Series,等同于df.A
2.3.2 通过多个标签在多个轴上进行选择 用loc 两个中括号
2.3.3 标签切片,类似于2
2.3.4 对于返回的对象进行维度缩减
2.3.5 获取一个标量以及快速访问一个标量。(意思等价)
2.4 通过位置选择
2.4.1 通过传递数值进行 位置选择(选择的是行)
2.4.1 通过数值进行切片
2.4.2 通过指定一个位置的列表
2.4.3 对行和列进行切片
2.4.4 获取特定的值
2.5 布尔索引
2.5.1 使用一个单独列的值来选择数据
2.5.2 使用where操作来选择数据
2.5.3 使用isin()方法来过滤
2.6 设置
2.6.1 设置新的列
2.6.2 通过标签设置新的值
2.6.3 通过位置设置新的值:
2.6.4 通过一个numpy数组设置一组新值
2.6.5 通过where操作来设置新的值
2.7 缺失值的处理
2.7.1 reindex()方法对指定轴上的索引进行改变/增加、删除
2.7.2 去掉包含缺失值的行
2.7.3 对缺失值进行补充
2.7.4 对数据进行布尔填充
2.8 相关操作
2.8.1 执行描述性统计
2.8.2 对数据应用函数
2.9 字符串方法
2.10 合并
2.10.1 concat
2.10.2 append将一行连接到DataFrame
2.11 分组
1. pandas介绍
Pandas 的数据结构:Pandas 主要有 Series(一维数组),DataFrame(二维数组),Panel(三维数组),Panel4D(四维数组),PanelND(更多维数组)等数据结构。其中 Series 和 DataFrame 应用的最为广泛。
Pandas 常用的数据结构有两种:Series 和 DataFrame。这些数据结构构建在 Numpy 数组之上,这意味着它们效率很高。
python版本:3.5>=python
导入相关库
import numpy as np import pandas as pd
2. 方法
2.1 Series
Series
是一个带有 名称 和索引的一维数组,既然是数组,肯定要说到的就是数组中的元素类型,在 Series 中包含的数据类型可以是整数、浮点、字符串、Python对象等。
2.1.1 传递list对象创建一个 Series
pandas会默认创建整型索引
import pandas as pd import numpy as np import matplotlib.pyplot as plt s= pd.Series([1,3,5,np.nan,6,8]) print(s)
//输出
0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float64
2.1.2 传递numpy array时间索引以及列标签来创建DataFrame
import pandas as pd import numpy as np import matplotlib.pyplot as plt s= pd.Series([1,3,5,np.nan,6,8]) # print(s) dates = pd.date_range('20170801',periods=6) df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD')) print(df)
//
A B C D 2017-08-01 -0.352464 0.207259 -0.379499 -0.040017 2017-08-02 -1.400304 -1.609741 1.149181 0.353892 2017-08-03 -0.244790 0.343552 -2.269876 -0.832983 2017-08-04 0.817258 -0.256027 0.917888 -0.240781 2017-08-05 0.312557 -1.103468 1.140370 -0.097515 2017-08-06 -0.945031 0.178114 0.099680 -0.993974
2.1.3 传递被转换成类似序列结构的字典对象来创建DataFrame
import pandas as pd import numpy as np import matplotlib.pyplot as plt df2 = pd.DataFrame({ 'A': 1, 'B':pd.Timestamp('20170801'), 'C':pd.Series(1,index=list(range(4)),dtype='float64'), 'D':np.array([3]*4,dtype='int64'), 'E':pd.Categorical(["test","train","test","train"]), 'F':'fooo' }) print(df2)
A B C D E F 0 1 2017-08-01 1.0 3 test fooo 1 1 2017-08-01 1.0 3 train fooo 2 1 2017-08-01 1.0 3 test fooo 3 1 2017-08-01 1.0 3 train fooo
查看不同列的数据类型
print(df2.dtype)
//
A int64 B datetime64[ns] C float64 D int64 E category F object dtype: object
2.2 查看数据
2.2.1 查看frame中头部和尾部的行
df.head(3) df.tail(3)
2.2.2 显示索引、列和底层的numpy数据。
print(df.index) print(df.columns) print(df.values)
//
DatetimeIndex(['2017-08-01', '2017-08-02', '2017-08-03', '2017-08-04', '2017-08-05', '2017-08-06'], dtype='datetime64[ns]', freq='D') Index(['A', 'B', 'C', 'D'], dtype='object') [[-0.99340137 -0.12548833 -1.08581538 1.17112124] [ 0.29427792 0.20182606 -0.84427908 -1.42783808] [-0.06528316 1.55255719 1.15818104 0.05286832] [ 1.49223138 -1.11517738 2.01386582 0.3496034 ] [ 0.23697223 0.43241392 -0.97061103 0.79105226] [ 2.96518919 0.8754193 -1.26479748 0.29930427]]
2.2.3 describe()函数对数据快速的统计汇总:
print(describe())
//
A B C D count 6.000000 6.000000 6.000000 6.000000 mean 0.396478 0.089271 -0.006982 0.281260 std 1.342037 1.158896 0.513877 0.997442 min -1.395445 -1.287098 -1.047989 -1.062651 25% -0.390341 -0.907016 0.116073 -0.073818 50% 0.210131 0.248303 0.193435 0.058509 75% 1.401632 0.856122 0.235431 0.655625 max 2.145753 1.559510 0.279513 1.896458
2.2.4 对数据的转置,按轴进行排序,按值进行排序
df.T df.sort_index(axis=1,ascending=False) df.sort(columns='B')
2.3 选择
虽然标准的python/numpy的选择和设置表达式都能够直接派上用场,但是作为工程使用的代码,我们推荐使用经过优化的pandas数据访问 方式:.at .iat .iloc .loc .ix
获取:
2.3.1 选择一个单独的列,这将会返回一个Series,等同于df.A
print(df['A'])
//
2017-08-01 0.559156 2017-08-02 -1.381263 2017-08-03 0.127286 2017-08-04 0.771317 2017-08-05 0.763690 2017-08-06 -0.123249 Freq: D, Name: A, dtype: float64
2.3.2 通过多个标签在多个轴上进行选择 用loc 两个中括号
print(df.loc[:,['A','B']])
//
A B 2017-08-01 0.040603 1.519448 2017-08-02 -2.429148 0.874873 2017-08-03 -0.315154 0.285603 2017-08-04 0.878968 -0.130717 2017-08-05 0.201083 -0.280419 2017-08-06 1.089989 0.754818
2.3.3 标签切片,类似于2
print(df.loc['20170802':'20170804',['A','B']])
//
A B 2017-08-02 1.923047 0.324715 2017-08-03 -0.349817 0.085359 2017-08-04 -0.675602 1.166312
2.3.4 对于返回的对象进行维度缩减
print(df.loc['20170803',['A','B']])
//
A -1.133357 B -1.008605 Name: 2017-08-03 00:00:00, dtype: float64
2.3.5 获取一个标量以及快速访问一个标量。(意思等价)
df.loc(dates[0],'A') df.at[dates[0],'A']
2.4 通过位置选择
2.4.1 通过传递数值进行 位置选择(选择的是行)
print(df) print(df.iloc[3])# 取第四行的数据
//
2017-08-01 0.150731 -0.167577 1.524639 -0.324676 2017-08-02 -0.118888 -0.100348 0.666961 0.618953 2017-08-03 0.634666 -0.937274 0.280727 -2.504798 2017-08-04 0.395685 -0.650699 -0.573055 -2.597323 2017-08-05 1.403470 0.636823 0.289136 1.294045 2017-08-06 -1.337154 1.718215 -0.093115 -1.529378 A 0.395685 B -0.650699 C -0.573055 D -2.597323 Name: 2017-08-04 00:00:00, dtype: float64
2.4.1 通过数值进行切片
与numpy /python 中的情况类似
print(df.iloc[3:5,0:2])
//
A B 2017-08-04 1.064645 1.346498 2017-08-05 -0.253172 0.713125
2.4.2 通过指定一个位置的列表
与numpy/python 中的情况类似
print(df.iloc[[1,2,4],[0,2]])
//
A C 2017-08-02 -0.987798 -0.081209 2017-08-03 0.039192 -0.244556 2017-08-05 -0.043044 -0.337542
2.4.3 对行和列进行切片
print(df.iloc[1:3,:])#对行进行切片 print(df.iloc[:,1:3]) #对列进行切片
//
A B C D 2017-08-02 0.598266 0.410904 -0.587577 0.979511 2017-08-03 -0.206643 -0.859047 -0.110966 -0.696556 B C 2017-08-01 -0.341683 -0.378477 2017-08-02 0.410904 -0.587577 2017-08-03 -0.859047 -0.110966 2017-08-04 -0.486971 0.248343 2017-08-05 2.641393 -1.229395 2017-08-06 1.023585 0.630160
2.4.4 获取特定的值
print(df.iloc[1,1]) print(df.iat[1,1])
//
0.426774827739 0.426774827739