Pandas 是基于 NumPy 的一种数据处理工具,该工具为了解决数据分析任务而创建。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的函数和方法.。

Pandas 的数据结构:Pandas 主要有 Series(一维数组),DataFrame(二维数组),Panel(三维数组),Panel4D(四维数组),PanelND(更多维数组)等数据结构。其中 Series 和 DataFrame 应用的最为广泛。

  • Series 是一维带标签的数组,它可以包含任何数据类型。包括整数,字符串,浮点数,Python 对象等。Series 可以通过标签来定位。
  • DataFrame 是二维的带标签的数据结构。我们可以通过标签来定位数据。这是 NumPy 所没有的。

 

 导入 Pandas 模块

练习Pandas 之前 ,首先需要导入 Pandas model , 并约定为 pd 

import pandas as pd 

创建 Series 数据类型

Pandas 中,Series 可以被看作由 1 列数据组成的数据集。

创建 Series 语法:s = pd.Series(data, index=index),可以通过多种方式进行创建,以下介绍了 3 个常用方法。

3. 从列表创建 Series 

arr = [0,1,2,3,4]
s1 = pd.Series(arr)
s1
0    0
1    1
2    2
3    3
4    4
dtype: int64

4. 从 Ndarray 创建 Series

import numpy as np 
n = np.random.randn(5) 
index = ['a','b','c','d','e']
s2 = pd.Series(n,index)
s2
a    1.454342
b   -0.262966
c    1.923254
d    0.761142
e   -0.086887
dtype: float64

5. 从字典创建 Series

d = {'a':1 ,'b':2,'c':3,'d':4,'e':5} 
s3 = pd.Series(d) 
s3
a    1
b    2
c    3
d    4
e    5
dtype: int64

Series 基本操作

6. 修改 Series 索引

print(s1) 
s1.index = ['A','B','C','D','E']
s1
0    0
1    1
2    2
3    3
4    4
dtype: int64

Out[8]:

A    0
B    1
C    2
D    3
E    4
dtype: int64

7. Series 纵向拼接

s4 = s3.append(s1) 
s4
a    1
b    2
c    3
d    4
e    5
A    0
B    1
C    2
D    3
E    4
dtype: int64

8. Series 按指定索引删除元素

print(s4)
s4 = s4.drop('e')  # 删除索引为 e 的值
s4

9. Series 修改指定索引元素

s4['A'] = 6  # 修改索引为 A 的值 = 6
s4

10. Series 按指定索引查找元素

s4['B'] 

11. Series 切片操作

例如对s4的前 3 个数据访问

s4[:3]
a    1
b    2
c    3
dtype: int64

Series 运算

12. Series 加法运算

Series 的加法运算是按照索引计算,如果索引不同则填充为 NaN(空值)。

s4.add(s3)
A    NaN
B    NaN
C    NaN
D    NaN
E    NaN
a    2.0
b    4.0
c    6.0
d    8.0
e    NaN
dtype: float64

13. Series 减法运算

Series的减法运算是按照索引对应计算,如果不同则填充为 NaN(空值)。

s4.sub(s3)

14. Series 乘法运算

s4.mul(s3)

15. Series 除法运算

s4.div(s3)

16. Series 求中位数

s4.median()

17. Series 求和

s4.sum()

18. Series 求最大值

s4.max()

19. Series 求最小值

s4.min()

创建 DataFrame 数据类型

与 Sereis 不同,DataFrame 可以存在多列数据。一般情况下,DataFrame 也更加常用。

20. 通过 NumPy 数组创建 DataFrame

dates = pd.date_range('today', periods=6)  # 定义时间序列作为 index
num_arr = np.random.randn(6, 4)  # 传入 numpy 随机数组
columns = ['A', 'B', 'C', 'D']  # 将列表作为列名
df1 = pd.DataFrame(num_arr, index=dates, columns=columns)
df1

21. 通过字典数组创建 DataFrame

data = {'animal': ['cat', 'cat', 'snake', 'dog', 'dog', 'cat', 'snake', 'cat', 'dog', 'dog'],
        'age': [2.5, 3, 0.5, np.nan, 5, 2, 4.5, np.nan, 7, 3],
        'visits': [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],
        'priority': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'no', 'yes', 'no', 'no']}

labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
df2 = pd.DataFrame(data, index=labels)
df2

22. 查看 DataFrame 的数据类型

df2.dtypes

DataFrame 基本操作

23. 预览 DataFrame 的前 5 行数据

此方法对快速了解陌生数据集结构十分有用。

df2.head()  # 默认为显示 5 行,可根据需要在括号中填入希望预览的行数

24. 查看 DataFrame 的后 3 行数据

df2.tail(3)

25.查看 DataFrame 的索引

df2.index

26. 查看 DataFrame 的列名

df2.columns

27. 查看 DataFrame 的数值

df2.values

28. 查看 DataFrame 的统计数据

df2.describe()

29. DataFrame 转置操作

df2.T

30. 对 DataFrame 进行按列排序

df2.sort_values(by='age')  # 按 age 升序排列

31. 对 DataFrame 数据切片

df2[1:3]

32. 对 DataFrame 通过标签查询(单列)

df2['age']

33. 对 DataFrame 通过标签查询(多列)

df2[['age', 'animal']]  # 传入一个列名组成的列表

34. 对 DataFrame 通过位置查询

df2.iloc[1:3]  # 查询 2,3 行

35. DataFrame 副本拷贝

# 生成 DataFrame 副本,方便数据集被多个不同流程使用
df3 = df2.copy()
df3

36. 判断 DataFrame 元素是否为空

df3.isnull()  # 如果为空则返回为 True

37. 添加列数据

num = pd.Series([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], index=df3.index)

df3['No.'] = num  # 添加以 'No.' 为列名的新数据列
df3

 

38. 根据 DataFrame 的下标值进行更改

# 修改第 2 行与第 1 列对应的值 3.0 → 2.0
df3.iat[1, 0] = 2  # 索引序号从 0 开始,这里为 1, 0
df3

39. 根据 DataFrame 的标签对数据进行修改

df3.loc['f','age'] = 0.5 
df3 
  animal age visits priority No.
a cat 2.5 1 yes 0
b cat 3.0 3 yes 1
c snake 0.5 2 no 2
d dog NaN 3 yes 3
e dog 5.0 2 no 4
f cat 0.5 3 no 5
g snake 4.5 1 no 6
h cat NaN 1 yes 7
i dog 7.0 2 no 8
j dog 3.0 1 no 9

40. DataFrame 求平均值操作

df3.mean()

41. 对 DataFrame 中任意列做求和操作

df3['visits'].sum()

字符串操作

42. 将字符串转化为小写字母

string = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca',
                    np.nan, 'CABA', 'dog', 'cat'])
print(string)
string.str.lower()

43. 将字符串转化为大写字母

 

string.str.upper()

DataFrame 缺失值操作

44. 对缺失值进行填充

df4 = df3.copy()

df4 = df3.copy()
print(df4)
df4.fillna(value=3)
 animal  age  visits priority  No.
a    cat  2.5       1      yes    0
b    cat  3.0       3      yes    1
c  snake  0.5       2       no    2
d    dog  NaN       3      yes    3
e    dog  5.0       2       no    4
f    cat  0.5       3       no    5
g  snake  4.5       1       no    6
h    cat  NaN       1      yes    7
i    dog  7.0       2       no    8
j    dog  3.0       1       no    9
 animal  age  visits priority  No.
a    cat  2.5       1      yes    0
b    cat  3.0       3      yes    1
c  snake  0.5       2       no    2
d    dog  3       3      yes    3
e    dog  5.0       2       no    4
f    cat  0.5       3       no    5
g  snake  4.5       1       no    6
h    cat  3      1      yes    7
i    dog  7.0       2       no    8
j    dog  3.0       1       no    9

45. 删除存在缺失值的行

df5 = df3.copy()
print(df5)
df5.dropna(how='any')  # 任何存在 NaN 的行都将被删除

46. DataFrame 按指定列对齐

left = pd.DataFrame({'key': ['foo1', 'foo2'], 'one': [1, 2]})
right = pd.DataFrame({'key': ['foo2', 'foo3'], 'two': [4, 5]})

print(left)
print(right)

# 按照 key 列对齐连接,只存在 foo2 相同,所以最后变成一行
pd.merge(left, right, on='key')

46. DataFrame 按指定列对齐

left = pd.DataFrame({'key': ['foo1', 'foo2'], 'one': [1, 2]})
right = pd.DataFrame({'key': ['foo2', 'foo3'], 'two': [4, 5]})

print(left)
print(right)

# 按照 key 列对齐连接,只存在 foo2 相同,所以最后变成一行
pd.merge(left, right, on='key')
    key  one
0  foo1    1
1  foo2    2
    key  two
0  foo2    4
1  foo3    5
  key one two
0 foo2 2 4

  这个就像 sql 里面的表的连接一样

DataFrame 文件操作

47. CSV 文件写入

 

df3.to_csv('animal.csv')
print("写入成功.")

48. CSV 文件读取

df_animal = pd.read_csv('animal.csv')
df_animal

49. Excel 写入操作

df3.to_excel('animal.xlsx', sheet_name='Sheet1')
print("写入成功.")

50. Excel 读取操作

pd.read_excel('animal.xlsx', 'Sheet1', index_col=None, na_values=['NA'])

 

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐