Pandas的常用操作大全

1 Series的创建

操作代码实现返回值说明
通过list构建Series(1)pd.Series(range(10))
         ~~~~~~~~         pd.Series([6.7,5.6,3,10,2], index=[1,2,3,4,5])
         ~~~~~~~~         pd.Series(np.arange(5, 10))
(2)pd.Series(range(3), index = [‘a’, ‘b’, ‘c’])
新Series(1)可以传入迭代器一维数组,自动生成索引
(2)自定义索引
通过dict构建Seriespd.Series(dict)新Seriesdict的key为索引,value为元素

2 Series的相关操作

操作代码实现返回值说明
获取前n行数据series.head(3)新Series获取前三行,默认获取前五行
获取后n行数据series.tail(3)新Series获取后三行,默认获取后五行
获取indexseries.indexRangeIndex获取index
获取valuesseries.valuesndarray一维数组获取所有values
算术运算series * 2新Series索引与数据的对应关系不被运算结果影响
逻辑运算series > 15新Series(bool)索引与数据的对应关系不被运算结果影响
name属性对象名:series.name
对象索引名:series.index.name
新Series
利用index取值series[index]
series[‘b’]
对应的value值
利用index切片series[2:4]
series[‘b’:‘d’]
新Series按索引名切片操作时,是包含终止索引的
不连续索引series[[0,2,4]]
series[[‘b’,‘d’]]
新Series注意是双层中括号[[…,…,…,]]
布尔索引series1 = series > 2
series2[series1]
新Series
对值排序series.sort_values(ascending=False)新Seriesascending:默认True升序,False降序
对索引排序series.sort_index()新Seriesascending:默认True升序,False降序

3 DataFrame的创建

操作代码实现返回值说明
通过ndarray
构建DataFrame
pd.DataFrame(array)
pd.DataFrame(np.random.randn(3,4), columns = [‘a’, ‘b’, ‘c’])
新DataFrame通过Numpy的ndarray构建,
自动生成行列索引,
columns 可指定列索引名
通过dict
构建DataFrame
pd.DataFrame(dict)
dict = {‘A’: 1,
           ~~~~~~~~~~           ‘B’: pd.Timestamp(‘20190616’),
           ~~~~~~~~~~           ‘C’: pd.Series(1, index=list(range(4)),dtype=‘float32’),
           ~~~~~~~~~~           ‘D’: np.array([3] * 4,dtype=‘int32’),
           ~~~~~~~~~~           ‘E’: [“Python”,“Java”,“C++”,“C”],
           ~~~~~~~~~~           ‘F’: ‘tiger’ }
新DataFramedict的key为列标签,value为元素,
自动生成行索引

4 DataFrame的相关操作

4.1 DataFrame的基本属性和方法
操作代码实现返回值说明
查看shapedataframe.shape元组返回dataframe形状
获取前n行dataframe.head(3)新DataFrame获取前三行,默认获取前五行
获取后n行dataframe.tail(3)新DataFrame获取后三行,默认获取后五行
获取indexdataframe.indexRangeIndex获取index
获取columnsdataframe.columnsRangeIndexDataFrame的列索引列表
获取valuesdataframe.valuesndarray二维数组获取所有values
转置dataframe.T新DataFrame
设置indexdata.index = list新DataFrame按照list的数据内容修改index,必须整体全部修改
错误示例:data.index[3] = ‘学生_3’
重设新的
下标索引
df.reset_index(drop=False)新DataFramedrop:默认为False,不删除原来索引,
如果为True,删除原来的索引值
把某列值
设置为新的索引
df.set_index(keys, drop=True)
(1)以月份设置新的索引:
df.set_index(‘month’)
(2)以年和月份设置多个索引:
df = df.set_index([‘year’, ‘month’])
新DataFramekeys : 列索引名成或者列索引名称的列表
drop: 默认为False,不删除原来索引,
如果为True,删除原来的索引值

(2)索引类型为MultiIndex层级索引(三维的DataFrame)
修改数据类型dataframe[‘A’].astype(np.float32)新Series
4.2 DataFrame的基本数据操作
操作代码实现返回值说明
读取文件pd.read_csv(“路径”)Pandas数据
删除若干列dataframe.drop([“a”,“b”,“c”], axis=1)新DataFrame
删除列数据del(dataframe[‘G’])None
增加列数据dataframe[‘G’] = series
dataframe[‘G’] = dataframe[‘A’] + 4
新DataFrame类似Python的dict添加key-value
对某一列
重新赋值
dataframe[‘G’] = 100新DataFrame指定列所有值均为100
对值排序df.sort_values(by=“open”, ascending=False)
df.sort_values(by=[‘open’, ‘high’])
新DataFrameby:指定排序参考的键,
       ~~~~~~       单个键或者多个键进行排序,
ascending:默认True升序,False降序
对索引排序dataframe.sort_index()新DataFrameascending:默认True升序,False降序
获取列数据(1)dataframe[‘A’] <=> dataframe.A
(2)dataframe[[‘A’]]
(3)dataframe[[‘a’,‘c’]]
(1)新Series
(2)新DataFrame(只有一列)
(3)新DataFrame
(1)通过列索引获取列数据
(2)注意是双层中括号[[…,…,…,]]
(3)注意是双层中括号[[…,…,…,]],
          ~~~~~~~~~          不连续索引
直接获取
某一个值
dataframe[‘A’] [‘2018-02-27’]对应位置的值直接使用行列索引名字的方式(先列后行
获取行dataframe[3: 5](左闭右开)
dataframe[‘b’ : ‘d’](左闭右闭)
新DataFrame
获取所有行df.itertuples(index=False)
4.3 DataFrame的高级索引loc、iloc、ix

请参考博文:Pandas中的高级索引loc、iloc、ix精简概括

4.4 DataFrame的运算
a. 运算函数
操作代码实现返回值说明
算术运算dataframe[‘open’].add(100)
dataframe[‘open’].sub(100)
新Series实际上是Series运算
逻辑运算dataframe[“open”] > 23新Series(bool类型)
筛选df[df[“open”] > 23]
df[(df[“open”] > 23) & (df[“open”] < 24)]
新DataFrame逻辑判断的结果可以作为筛选的依据
筛选函数
query()
dataframe.query(“open<24 & open>23”)新DataFrame筛选出符合条件的所有数据
筛选函数
isin()
dataframe[dataframe[“open”].isin([23.53, 23.85])]新DataFrame筛选出"open"列中值为23.53和23.85的所有数据
b. 统计运算函数
函数作用函数作用
describe()描述count()非NaN个数
sum()求和prod()所有元素的乘积
mean()平均值abs()绝对值
min()最小值max()最大值
std()标准差var()方差
median()中位数mode()众数
idxmax()最大值的索引标签idxmin()最小值的索引标签
cumsum()计算前1/2/3/…/n个数的和cumprod()计算前1/2/3/…/n个数的积
cummin()计算前1/2/3/…/n个数的最小值cummax()计算前1/2/3/…/n个数的最大值

中位数:为将数据从小到大排列,在最中间的那个数为中位数。如果没有中间数,取中间两个数的平均值。

c. 自定义运算
  • apply(func, axis=0)
    func:自定义函数;默认是列axis=0,对行进行运算axis=1。

示例:对’open’, 'close’两列进行自定义运算

>>>data[['open', 'close']].apply(lambda x: x.max() - x.min(), axis=0)   # 返回Series
===运行结果:======================================
open     22.74
close    22.85
dtype: float64

5 高级操作

5.1 缺失值处理
操作代码实现返回值说明
替换字符
例"?"
data.replace(to_replace="?", value=np.NaN)新DataFrameto_replace:替换前的值
value:替换后的值
判断缺失值
是否存在
(1)pd.notnull(dataframe)
(2)np.all(pd.notnull(dataframe))
(3)pd.isnull(dataframe)
(4)np.any(pd.isnull(dataframe))
(1)新DataFrame(bool类型)
(2)True/False
(3)新DataFrame(bool类型)
(4)True/False
(1)
(2)里面如果有一个缺失值,就返回False
(3)
(4)里面如果有一个缺失值,就返回True
删除缺失值data.dropna()新DataFrame使用dropna的前提:
缺失值的类型必须是np.nan
填充缺失值data[" “].fillna(data[” "].mean(), inplace=True)新DataFrameinplace:
True:会修改原数据,
False:不替换修改原数据,生成新的对象
5.2 数据离散化
  • 可以用来减少给定连续属性值的个数
  • 在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数值代表落在每个子区间中的属性值。
操作代码实现返回值说明
自行分组pd.qcut(data[" "], q).value_counts()新Series将数据分组,参数q为组数
一般会与value_counts搭配使用,统计每组的个数
自定义区间分组bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100]
pd.cut(data[" "], bins).value_counts()
新Series
将分组数据变成
one-hot编码矩阵
(哑变量矩阵)
pd.get_dummies(data[" "], prefix=“前缀”)新DataFramedata:array-like, Series, or DataFrame
prefix:分组名字
5.3 数据合并(concat、merge)

请参考博文:

left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
                     'key2': ['K0', 'K1', 'K0', 'K1'],
                     'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3']})

right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
                      'key2': ['K0', 'K0', 'K0', 'K0'],
                      'C': ['C0', 'C1', 'C2', 'C3'],
                      'D': ['D0', 'D1', 'D2', 'D3']})
5.3.1 pd.concat实现数据合并

pd.concat([data1, data2], axis=1)
按照行或列进行合并,axis=0为列索引,axis=1为行索引

在这里插入图片描述

5.3.2 pd.merge实现数据合并

pd.merge(left, right, how='inner', on=None)
可以指定按照两组数据的共同键值对合并或者左右各自
left: DataFrame
right: 另一个DataFrame
on: 指定的共同键
how:按照什么方式连接

a. 内连接
查询两个表中符合条件的共有记录。
内连接查询
在这里插入图片描述
b. 外连接
两个表中所有记录都保留;两个表不存在的数据,使用np.NaN值填充。
在这里插入图片描述
c. 左连接
以左表为主,根据条件查询右表数据;左表数据全部保留,右表不存在的数据,使用np.NaN值填充。
左连接
在这里插入图片描述
d. 右连接
以右表为主,根据条件查询左表数据;右表数据全部保留,左表不存在的数据,使用np.NaN值填充
右连接查询
在这里插入图片描述

5.4 分组与聚合

DataFrame.groupby(key, as_index=False)
key:分组的列数据,可以多个

案例:不同颜色的不同笔的价格数据
进行分组,对颜色分组,对价格进行聚合

>>>col =pd.DataFrame({'color': ['white','red','green','red','green'], 
				      'object': ['pen','pencil','pencil','ashtray','pen'],
				      'price1':[5.56,4.20,1.30,0.56,2.75],
				      'price2':[4.75,4.12,1.60,0.75,3.15]})

	 color    object    price1    price2
0    white    pen       5.56    4.75
1    red      pencil    4.20    4.12
2    green    pencil    1.30    1.60
3    red      ashtray   0.56    0.75
4    green    pen       2.75    3.15
  • a(与b效果相同)
>>>col.groupby(['color'])['price1'].mean()

color
green    2.025
red      2.380
white    5.560
Name: price1, dtype: float64
  • b
>>>col['price1'].groupby(col['color']).mean()

color
green    2.025
red      2.380
white    5.560
Name: price1, dtype: float64
  • c 添加参数as_index=False后,注意数据的结构的变化
>>>col.groupby(['color'], as_index=False)['price1'].mean()

	 color    price1
0    green    2.025
1    red      2.380
2    white    5.560
  • d agg()---- aggregation聚合函数
dataset.groupby('color').agg([list])
5.5 交叉表与透视表

交叉表:用于计算一列数据对于另外一列数据的分组个数(用于统计分组频率的特殊透视表)

pd.crosstab(df["A"], df["B"])

透视表:透视表是将原有的DataFrame的列分别作为行索引和列索引,然后对指定的列应用聚集函数

dataframe.pivot_table([], index=[])
5.6 文件的读取与存储
  • CSV、HDF5、JSON文件的读取与存储
操作代码实现返回值说明
读取pd.read_*()pd.read_csv(“路径”, usecols=[‘open’, ‘close’])DataFrame*可以是csv、hdf、json
dataframe.to_*()dataframe.to_csv(“路径”, columns=[‘open’])None*可以是csv、hdf、json
  • 17
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值