Pandas总结(未完)

0.关于显示的问题

#显示所有列
pd.set_option(‘display.max_columns’, None) # 可以把None 改成你想要最多显示的 大小
#显示所有行
pd.set_option(‘display.max_rows’, None) # 可以把None 改成你想要最多显示的 大小

1. 从列表创建 Series
arr = [0, 1, 2, 3, 4]
s1 = pd.Series(arr)  # 如果不指定索引,则默认从 0 开始
0    0
1    1
2    2
3    3
4    4
dtype: int64
2. 从 Ndarray 创建 Series
import numpy as np
n = np.random.randn(5)  # 创建一个随机 Ndarray 数组

index = ['a', 'b', 'c', 'd', 'e']
s2 = pd.Series(n, index=index)
a   -1.713919
b    0.954737
c   -1.070564
d   -2.258011
e   -0.324233
dtype: float64
3. 从字典创建 Series
d = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
s3 = pd.Series(d)
a    1
b    2
c    3
d    4
e    5
dtype: int64

Series 基本操作

6. 修改 Series 索引
s1.index = ['A', 'B', 'C', 'D', 'E']  # 修改后的索引
A    0
B    1
C    2
D    3
E    4
dtype: int64
7. Series 纵向拼接
s4 = s3.append(s1)  # 将 s1 拼接到 s3
a    1
b    2
c    3
d    4
e    5
A    0
B    1
C    2
D    3
E    4
8. Series 按指定索引删除元素
s4 = s4.drop('e')  # 删除索引为 e 的值

创建 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)

在这里插入图片描述

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)

在这里插入图片描述

22. 查看 DataFrame 的数据类型
df2.dtypes
animal       object
age         float64
visits        int64
priority     object
dtype: object
23. 预览 DataFrame 的前 5 行数据
df2.head()  # 默认为显示 5 行,可根据需要在括号中填入希望预览的行数
24. 查看 DataFrame 的后 3 行数据
df2.tail(3)
25.查看 DataFrame 的索引
df2.index
Index(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'], dtype='object')
26. 查看 DataFrame 的列名
df2.columns
Index(['animal', 'age', 'visits', 'priority'], dtype='object')
27. 查看 DataFrame 的数值
df2.values
array([['cat', 2.5, 1, 'yes'],
       ['cat', 3.0, 3, 'yes'],
       ['snake', 0.5, 2, 'no'],
       ['dog', nan, 3, 'yes'],
       ['dog', 5.0, 2, 'no'],
       ['cat', 2.0, 3, 'no'],
       ['snake', 4.5, 1, 'no'],
       ['cat', nan, 1, 'yes'],
       ['dog', 7.0, 2, 'no'],
       ['dog', 3.0, 1, 'no']], dtype=object)
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']
df2.age  # 等价于 df2['age']
a    2.5
b    3.0
c    0.5
d    NaN
e    5.0
f    2.0
g    4.5
h    NaN
i    7.0
j    3.0
Name: age, dtype: float64
33. 对 DataFrame 通过标签查询(多列)
df2[['age', 'animal']]  # 传入一个列名组成的列表

在这里插入图片描述

34. 对 DataFrame 通过位置查询
df2.iloc[1:3]  # 查询 2,3 行

在这里插入图片描述

35. DataFrame 副本拷贝
  • 生成 DataFrame 副本,方便数据集被多个不同流程使用
df3 = df2.copy()
36. 判断 DataFrame 元素是否为空
  • 如果为空则返回为 True
df3.isnull()  

在这里插入图片描述

37. 添加列数据
num = pd.Series([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], index=df3.index)

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

jjj

38. 根据 DataFrame 的下标值进行更改。
# 修改第 2 行与第 2 列对应的值 3.0 → 2.0
df3.iat[2, 2] = 100  # 索引序号从 0 开始,这里为 1, 1
39. 根据 DataFrame 的标签对数据进行修改
df3.loc['f', 'age'] = 1.5

在这里插入图片描述

40. DataFrame 求平均值操作
df3.mean()
41. 对 DataFrame 中任意列做求和操作
df3['visits'].sum()

字符串操作

string = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca',
                    np.nan, 'CABA', 'dog', 'cat'])
print(string)
string.str.lower()
0       A
1       B
2       C
3    Aaba
4    Baca
5     NaN
6    CABA
7     dog
8     cat
---------------
0       a
1       b
2       c
3    aaba
4    baca
5     NaN
6    caba
7     dog
8     cat
43. 将字符串转化为大写字母
string.str.upper()

DataFrame 缺失值操作

44. 对缺失值进行填充
df4.fillna(value=3)
45. 删除存在缺失值的行
  • any 存在一个就删除 all 全部不存在才删除
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')

在这里插入图片描述

DataFrame 文件操作

  • Excel 的读取和csv的文件操作类似
48. CSV 文件读取
df_animal = pd.read_csv('animal.csv')
47. CSV 文件写入
df3.to_csv('animal.csv')

进阶部分

时间序列索引

51. 建立一个以 2018 年每一天为索引,值为随机数的 Series
date = pd.date_range(start='2019-08-19',end='2019-08-25')  # 创建日期
s = pd.DataFrame(np.random.rand(len(date),2),index=date)   # 创建数据

在这里插入图片描述

52. 选择s中的周三
# 周一从 0 开始
s[s.index.weekday == 2]

在这里插入图片描述

53. 统计s中每个月值的平均值
s.resample('M').mean()

在这里插入图片描述

54. 将 Series 中的时间进行转换(秒转分钟)
  • 创建一个DataFrame
s = pd.date_range('today', periods=100, freq='S')   # freq='S'以一秒为一个单位

ts = pd.Series(np.random.randint(0, 500, len(s)), index=s)

在这里插入图片描述

ts.resample('Min').sum()

在这里插入图片描述

57.不同时间表示方式的转换
rng = pd.date_range('1/1/2018', periods=5, freq='M')
ts = pd.Series(np.random.randn(len(rng)), index=rng)
print(ts)

在这里插入图片描述

ps = ts.to_period()

在这里插入图片描述

ps.to_timestamp()

Series 多重索引

58. 创建多重索引 Series

构建一个 letters = ['A', 'B', 'C']numbers = list(range(10))为索引,值为随机数的多重索引 Series。

letters = ['A', 'B', 'C']    # 第一重索引
numbers = list(range(5))   	 # 第二重索引

mi = pd.MultiIndex.from_product([letters, numbers])  # 设置多重索引
s = pd.Series(np.random.rand(15), index=mi)  # 随机数

在这里插入图片描述

59. 多重索引 Series 查询
# 查询索引为 1,3,6 的值
s.loc[:, [1, 3, 6]]

在这里插入图片描述

60. 多重索引 Series 切片
s.loc[pd.IndexSlice[:'B', 5:]]

在这里插入图片描述

DataFrame 多重索引

61. 根据多重索引创建 DataFrame

创建一个以 letters = ['A', 'B']numbers = list(range(6))为索引,值为随机数据的多重索引 DataFrame。

frame = pd.DataFrame(np.arange(12).reshape(6, 2),
                     index=[list('AAABBB'), list('123123')],
                     columns=['hello', 'linux'])

在这里插入图片描述

62. 多重索引设置列名称
frame.index.names = ['letter','score']

在这里插入图片描述

63. DataFrame 多重索引分组求和
frame.groupby('letter').sum()

在这里插入图片描述

64. DataFrame 行列名称转换
frame.stack()

在这里插入图片描述

65. DataFrame 索引转换
print(frame)
frame.unstack()

在这里插入图片描述

66. 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']
df = pd.DataFrame(data, index=labels)

在这里插入图片描述
查找 age 大于 3 的全部信息

df[df['age'] > 3]

在这里插入图片描述

67. 根据行列索引切片
df.iloc[2:4, 1:3]

在这里插入图片描述

68. DataFrame 多重条件查询

查找 age<3 且为 cat 的全部数据。

  • 注意必须要用()把条件都括起来,并且用&连接起来
df = pd.DataFrame(data, index=labels)

df[(df['animal'] == 'cat') & (df['age'] < 3)]

在这里插入图片描述

69. DataFrame 按关键字查询
df3 = df.copy()

在这里插入图片描述

df3[df3['animal'].isin(['cat', 'dog'])]

在这里插入图片描述

70. DataFrame 按标签及列名查询。
df.loc[df2.index[[3, 4, 8]], ['animal', 'age']]

在这里插入图片描述

71. DataFrame 多条件排序

按照 age 降序,visits 升序排列

  • ascending=[False, True] False 是降序 True是升序
df.sort_values(by=['age', 'visits'], ascending=[False, True])

在这里插入图片描述

72.DataFrame 多值替换

priority 列的 yes 值替换为 Trueno 值替换为 False

df['priority'] =  df['priority'].map({'yes': True, 'no': False})

在这里插入图片描述

73. DataFrame 分组求和
df4.groupby('animal').sum()

在这里插入图片描述

74. 使用列表拼接多个 DataFrame
temp_df1 = pd.DataFrame(np.random.randn(5, 4))  # 生成由随机数组成的 DataFrame 1
temp_df2 = pd.DataFrame(np.random.randn(5, 4))  # 生成由随机数组成的 DataFrame 2
temp_df3 = pd.DataFrame(np.random.randn(5, 4))  # 生成由随机数组成的 DataFrame 3

print(temp_df1)
print(temp_df2)
print(temp_df3)

pieces = [temp_df1, temp_df2, temp_df3]
pd.concat(pieces,axis=0)     # 按行滑动  axis=1 是按列滑动

在这里插入图片描述

75. 找出 DataFrame 表中和最小的列
  • 返会列名
df = pd.DataFrame(np.random.random(size=(5, 5)), columns=list('abcde'))
print(df)
df.sum().idxmin()  # idxmax(), idxmin() 为 Series 函数返回最大最小值的索引值 

在这里插入图片描述

77. DataFrame 分组,并得到每一组中最大三个数之和
  • level = 如果轴是MultiIndex(分层),则沿特定级别计数,折叠为系列。
df = pd.DataFrame({'A': list('aaabbcaabcccbbc'),
                   'B': [12, 345, 3, 1, 45, 14, 4, 52, 54, 23, 235, 21, 57, 3, 87]})
df.groupby('A')['B'].nlargest(3).sum(level=0)

在这里插入图片描述
在这里插入图片描述

透视表

当分析庞大的数据时,为了更好的发掘数据特征之间的关系,且不破坏原数据,就可以利用透视表 pivot_table 进行操作。

78. 透视表的创建

新建表将 A, B, C 列作为索引进行聚合。

df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 3,
                   'B': ['A', 'B', 'C'] * 4,
                   'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,
                   'D': np.random.randn(12),
                   'E': np.random.randn(12)})
df

在这里插入图片描述

# 根据列 进行聚合  然后变成行名
pd.pivot_table(df, index=['A', 'B'])

在这里插入图片描述

79. 透视表按指定行进行聚合

将该 DataFrame 的 D 列聚合,按照 A,B 列为索引进行聚合,聚合的方式为默认求均值

pd.pivot_table(df, values=['D'], index=['A', 'B'])
80. 透视表聚合方式定义

上一题中 D 列聚合时,采用默认求均值的方法,若想使用更多的方式可以在 aggfunc 中实现。

pd.pivot_table(df, values=['D'], index=['A', 'B'], aggfunc=[np.sum, len])
81. 透视表利用额外列进行辅助分割

D 列按照 A,B 列进行聚合时,若关心 C 列对 D 列的影响,可以加入 columns 值进行分析。
``python
pd.pivot_table(df, values=[‘D’], index=[‘A’, ‘B’],
columns=[‘C’], aggfunc=np.sum)

#### 82. 透视表的缺省值处理
在透视表中由于不同的聚合方式,相应缺少的组合将为缺省值,可以加入 `fill_value` 对缺省值处理。
```python
pd.pivot_table(df, values=['D'], index=['A', 'B'],
               columns=['C'], aggfunc=np.sum, fill_value=0)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自由小冰儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值