【Pandas】常用基本操作

简介: 另一个重要的数据对象是数据框,他的属性包括index、列名和值。由于数据框是更为广泛的一种数据组织形式,许多外部数据文件读取到Python中大部分会采用数据框的形式进行存取,比如数据库、excel和TXT文本。

1.序列操作

# -*- coding: utf-8 -*-
"""
Created on Fri Sep 17 09:41:28 2021
@author: 86493
"""
# 序列创建及其访问
import pandas as pd
import numpy as np
s1 = pd.Series([1, -2, 2.3, 'hq'])
# 指定列表和索引,创建个性化序列
s2 = pd.Series([1, -2, 2.3, 'hq'], index = ['a', 'b', 'c', 'd'])
# 指定元组创建默认序列
s3 = pd.Series((1, -2, 2.3, 'hq'))
# 指定数组创建默认序列
s4 = pd.Series(np.array([1, 2, 4, 7, 1]))
# 通过字典创建序列
mydict = {'red':2000, 'blue':1000, 'yellow':500}
ss = pd.Series(mydict)
print(ss)
print(s1)
print(s1[3])
print(s2)
print(s2['c'])
# 2.序列属性
s1 = pd.Series([1, -2, 2.3, 'hq'])
va1 = s1.values
in1 = s1.index
va2 = list(va1)
print(va2) # 通过list转为列表
# 3.序列方法
s5 = [1, 2, 2.3, 'andy', 'liu', 'li', 'andy']
# 将列表转为序列
s5 = pd.Series(s5)
s51 = s5.unique() # 去重
s52 = s5.isin([1, 'andy']) # 判断元素是否在内部
print(s52)
s53 = s5.value_counts() # 统计每个元素的出现个数
print(s53)
ss1 = pd.Series([10, 'hq', 60, np.nan, 20])
tt1 = ss1[~ss1.isnull()] # 取反,用逻辑数组进行索引获取数据
print(tt1)
tt2 = ss1[ss1.notnull()] # 判断序列的非空值,效果同上
print(tt2)
tt3 = ss1.dropna() # 清洗空值
print(tt3)
# 序列切片
import pandas as pd
import numpy as np
s1 = pd.Series([1, -2, 2.3, 'hq'])
s2 = pd.Series([1, -2, 2.3, 'hq'], index = ['a', 'b', 'c', 'd'])
# 通过数组创建序列
s4 = pd.Series(np.array([1, 2, 4, 7.1])) # 注意这里面的括号和中括号
s22 = s2[['a', 'd']] 
print(s22)
s23 = s1[0:3]
print("s23:\n",s23) # 下标为0-2的元素
s24 = s1[[0, 2, 3]] # 索引为不连续的数组
print("s24:\n", s24)
s25 = s4[s4>3]
print("s25:\n",s25)
# 序列聚合运算
lst = [i for i in range(1, 11)]
s = pd.Series(lst)
print("s:",s)
su = s.sum()
sm = s.mean()
ss = s.std()
smx = s.max()
smi = s.min()

2.数据框操作

另一个重要的数据对象是数据框,他的属性包括index、列名和值。由于数据框是更为广泛的一种数据组织形式,许多外部数据文件读取到Python中大部分会采用数据框的形式进行存取,比如数据库、excel和TXT文本。

# -*- coding: utf-8 -*-
"""
Created on Fri Sep 17 14:17:37 2021
@author: 86493
"""
import pandas as pd
import numpy as np
data = {
        'a': [2, 2, np.nan, 5, 6],
        'b': ['kl', 'kl', 'kl', np.nan, 'kl'],
        'c': [4, 6, 5, np.nan, 6],
        'd': [7, 9, np.nan, 9, 8]
        }
df = pd.DataFrame(data)
print("初始数据为:\n",df)
# 3.2 数据框属性
print('columns=', df.columns) # 列名
print('index=', df.index) #索引
print('values=\n', df.values) # 数据框的值
# 3.3 数据框方法
df1 = df.dropna() # 去掉数据集的空值
print(df1)
df2 = df.fillna(0) # 所有空值元素
df3 = df.fillna('kl')
df4 = df.fillna({'a':0, 'b':'kl', 'c':0, 'd':0}) # 全部列填充
df5 = df.fillna({'a':0, 'b':'kl'}) # 部分列填充
import pandas as pd
data = {'a': [5, 3, 4, 1, 6],
        'b': ['d', 'c', 'a', 'e', 'q'],
        'c': [4, 6, 5, 5, 6]
        }
Df = pd.DataFrame(data)
# 对a列进行降序排列
Df1 = Df.sort_values('a', ascending = False) # 默认为升序,这里为降序
Df2 = Df1.sort_index(ascending = False) # 对index进行降序排列
H4 = Df2.head(4) # 显示前4行
H41 = H4.drop('b', axis = 1) # 指定轴为1,删除第b列
Df3 = pd.DataFrame({'d': [1, 2, 3, 4, 5]})
Df4 = Df.join(Df3) # 加入另一个列
import pandas as pd
lst1 = ['a', 'b', 'c', 'd', 'e', 'f']
lst2 = [1, 2, 3, 4, 5, 6]
lst3 = [1.4, 3.5, 2, 6, 7, 8]
lst4 = [4, 5, 6, 7, 8, 9]
lst5 = ['t', 5, 6, 7, 'k', 9.6]
# 定义字典D,值为字符、数值混合数据
D = {'M1':lst1, 'M2':lst2, 'M3':lst3, 'M4':lst4, 'M5':lst5}
# 字典G,值为纯数值数据
G = {'M1':lst2, 'M2':lst3, 'M3':lst4}
D = pd.DataFrame(D) # 将字典转为数据框
D1 = D.values # 将数据框转为numpy数组
G = pd.DataFrame(G) # 将字典转为数据框
G1 = G.values # 将数据框转为numpy数组
# to_excel
D.to_excel('D.xlsx')
G.to_excel('G.xlsx')
# 统计方法
Dt = Df4.drop('b', axis = 1) # Df1中删除b列
print(Dt)
R1 = Dt.sum() # 各列求和
R2 = Dt.mean() # 各列求平均值
R3 = Dt.describe() # 各列做描述性统计
# 数据框切片
# 1.利用iloc属性切片
print(df2) 
c3 = df2.iloc[1:3,2] # 第1行到第3-1=2行,第2列的元素
c4 = df2.iloc[1:3, 0:2]
c5 = df2.iloc[1:3, :]
c6 = df2.iloc[[0, 2, 3], [1, 2]]
TF = [True, False, False, True, True]
c7 = df2.iloc[TF, [1]]
# 2.利用loc的练习2
print("df2:\n",df2)
c8 = df2.loc[df2['b'] == 'kl', :]
print("c8:\n",c8)
c9 = df2.loc[df2['b'] == 'kl', :].head(3)
c10 = df2.loc[df2['b'] == 'kl', ['a', 'c']].head(3)
c11 = df2.loc[df2['b'] == 'kl', ['a', 'c']]
print("c11:\n",c11)

注意iloc(和正常的逻辑一样,先确定行,再确定列位置)和loc不同——数据框中的loc属性则主要是基于列标签进行索引,即对列值进行筛选实现行定位,再通过指定列,从而实现数据切片操作。如果取所有列,可以用冒号来表示。切片操作获得的数据还可以筛选前N行。

结果为:

初始数据为:
      a    b    c    d
0  2.0   kl  4.0  7.0
1  2.0   kl  6.0  9.0
2  NaN   kl  5.0  NaN
3  5.0  NaN  NaN  9.0
4  6.0   kl  6.0  8.0
columns= Index(['a', 'b', 'c', 'd'], dtype='object')
index= RangeIndex(start=0, stop=5, step=1)
values=
 [[2.0 'kl' 4.0 7.0]
 [2.0 'kl' 6.0 9.0]
 [nan 'kl' 5.0 nan]
 [5.0 nan nan 9.0]
 [6.0 'kl' 6.0 8.0]]
     a   b    c    d
0  2.0  kl  4.0  7.0
1  2.0  kl  6.0  9.0
4  6.0  kl  6.0  8.0
   a  c  d
0  5  4  1
1  3  6  2
2  4  5  3
3  1  5  4
4  6  6  5
     a   b    c    d
0  2.0  kl  4.0  7.0
1  2.0  kl  6.0  9.0
2  0.0  kl  5.0  0.0
3  5.0   0  0.0  9.0
4  6.0  kl  6.0  8.0
df2:
      a   b    c    d
0  2.0  kl  4.0  7.0
1  2.0  kl  6.0  9.0
2  0.0  kl  5.0  0.0
3  5.0   0  0.0  9.0
4  6.0  kl  6.0  8.0
c8:
      a   b    c    d
0  2.0  kl  4.0  7.0
1  2.0  kl  6.0  9.0
2  0.0  kl  5.0  0.0
4  6.0  kl  6.0  8.0
c11:
      a    c
0  2.0  4.0
1  2.0  6.0
2  0.0  5.0
4  6.0  6.0

3.滚动计算函数

滚动计算函数在金融数据处理中应用非常广泛,比如移动平均价、移动平均量等计算。

# -*- coding: utf-8 -*-
"""
Created on Fri Sep 17 19:54:46 2021
@author: 86493
"""
import pandas as pd
import numpy as np
L = [i for i in range(1, 15)] # 列表
T = (j for j in range(1,15)) # 元组
# 将列表L转换为数组,赋值给变量A
A = np.array(L) 
# 将列表L转换为序列,赋值给变量S
S = pd.Series(L)
# 要对序列,如果对数组就会报错
avg_S = S.rolling(10).mean()
# avg_A = A.rolling(10).mean()
sum_S = S.rolling(10).sum()
min_S = S.rolling(10).min()
max_S = S.rolling(10).max()

4.计算交易量的总和

excel里的数据如下:

image.png

# -*- coding: utf-8 -*-
"""
Created on Thu Sep 23 15:27:31 2021
@author: 86493
"""
import pandas as pd
df = pd.read_excel('股票数据.xlsx') # 保存为一个dataframe变量
df1 = df.iloc[:,2:4]
Nt = df1.values # 转为numpy数组
Nt1 = df.loc[ (df['交易日期'] > 20210902) & (df['交易日期'] < 20210906)]
Sum = Nt1['交易量'].sum()
print(Nt1)
print(Sum)
# 结果如下
股票代码      交易日期   收盘价      交易量
2  600000  20210903  18.2    23212
3  600000  20210904  11.4  1231231
4  600000  20210905  15.3     1232
1255675
相关文章
|
5月前
|
BI 数据处理 索引
Pandas基本操作:Series和DataFrame(Python)
Pandas基本操作:Series和DataFrame(Python)
328 1
|
数据挖掘 索引 Python
pandas基本操作之数据访问(查看与检索)
对于数据分析来说,在构造或载入数据后最基本的操作应该就是对数据的访问了。看一看数据的结构、组成、分布等,根据需要从数据集中检索提取出相应的数据。pandas作为数据分析的利器,当然提供了多种查看和检索数据的方法。本文就来捋一捋pandas基本的数据访问。
218 0
|
数据中心 开发者 索引
Pandas 基本操作|学习笔记
快速学习 Pandas 基本操作
147 0
Pandas 基本操作|学习笔记
|
数据挖掘 索引 Python
【Python数据分析 - 10】:pandas常见基本操作
【Python数据分析 - 10】:pandas常见基本操作
【Python数据分析 - 10】:pandas常见基本操作
|
29天前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
46 0
|
3月前
|
数据挖掘 Python
【Python】已解决:Python pandas读取Excel表格某些数值字段结果为NaN问题
【Python】已解决:Python pandas读取Excel表格某些数值字段结果为NaN问题
281 0
|
19天前
|
机器学习/深度学习 并行计算 大数据
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
45 3
|
19天前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
30 1
|
1月前
|
机器学习/深度学习 数据采集 监控
Pandas与Matplotlib:Python中的动态数据可视化
Pandas与Matplotlib:Python中的动态数据可视化