1.Pandas简述
- Pandas是Python的一个数据分析包,该工具为解决数据分析任务而创建。
- Pandas纳入大量库和标准数据模型,提供高效的操作数据集所需的工具。
- Pandas提供大量能使我们快速便捷地处理数据的函数和方法。
- Pandas是字典形式,基于NumPy创建,让NumPy为中心的应用变得更加简单。
2.Pandas安装
3.Pandas引入
4.Pandas数据结构
Pandas 的主要数据结构是 Series (一维数据)与 DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。
4.1 Series
Series 是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。
| import numpy as np |
| import pandas as pd |
| s=pd.Series([1,2,3,np.nan,5,6]) |
| |
| print(s) |

4.2 DataFrame
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
| dates=pd.date_range('20180310',periods=6) |
| df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=['A','B','C','D']) |
| print(df) |


| |
| df_1=pd.DataFrame({'A' : 1., |
| 'B' : pd.Timestamp('20180310'), |
| 'C' : pd.Series(1,index=list(range(4)),dtype='float32'), |
| 'D' : np.array([3] * 4,dtype='int32'), |
| 'E' : pd.Categorical(["test","train","test","train"]), |
| 'F' : 'foo' |
| }) |
| print(df_1) |







| print(df_1.sort_index(axis=1, ascending=False)) |
| |

| print(df_1.sort_values(by='E')) |

5.Pandas选择数据
| dates=pd.date_range('20180310',periods=6) |
| df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=['A','B','C','D']) |
| print(df) |

5.1 选择某行或某列

5.2 切片选择
| print(df[0:3], df['20180310':'20180314']) |
| |

5.3 根据标签loc-行标签进行选择数据
| print(df.loc['20180312', ['A','B']]) |

5.4 根据序列iloc-行号进行选择数据


| print(df.iloc[[1,2,4],[0,2]]) |

5.5 根据判断筛选

6.Pandas设置数据
6.1 根据loc和iloc设置
| dates = pd.date_range('20180310', periods=6) |
| df = pd.DataFrame(np.arange(24).reshape((6,4)), index=dates, columns=['A', 'B', 'C', 'D']) |
| print(df) |

| df.iloc[2,2] = 999 |
| df.loc['2018-03-13', 'D'] = 999 |
| print(df) |

6.2 根据条件设置

6.3 根据行或列设置

6.4 添加数据
| df['E'] = pd.Series([1,2,3,4,5,6], index=pd.date_range('20180313', periods=6)) |
| print(df) |

7.Pandas处理丢失数据
处理数据中NaN数据,我们用这个测试数据 property-data.csv
7.1 输出csv文件数据
| import pandas as pd |
| |
| df = pd.read_csv('property-data.csv') |
| |
| print (df) |

7.2 使用dropna()函数去掉NaN的行或列
| new_df = df.dropna() |
| |
| print(new_df) |

7.3 使用fillna()函数替换NaN值
| print(df.fillna(value=0)) |

7.4 使用isnull()函数判断数据是否丢失

| print(np.any(df.isnull())) |

8.Pandas导入导出
pandas可以读取与存取像csv、excel、json、html、pickle等格式的资料,详细说明请看官方资料
| data=pd.read_csv('test1.csv') |
| data.to_pickle('test2.pickle') |
| |
9.Pandas合并数据
9.1 axis合并方向
| df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d']) |
| df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d']) |
| df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a','b','c','d']) |
| res = pd.concat([df1, df2, df3], axis=0, ignore_index=True) |
| print(res) |

9.2 join合并方式
| df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'], index=[1,2,3]) |
| df2 = pd.DataFrame(np.ones((3,4))*1, columns=['b','c','d', 'e'], index=[2,3,4]) |
| print(df1) |


| res=pd.concat([df1,df2],axis=1,join='outer') |
| print(res) |

| res=pd.concat([df1,df2],axis=1,join='inner') |
| print(res) |

指定合并时使用的连接方式,连接方式有四种,默认为left。
代码 | 连接方式 | |
---|
inner | 内连 | 取行索引的交集 |
outer | 外连 | 取行索引的并集 |
left | 左连 | 使用左边df的行索引 |
right | 右连 | 使用右边df的行索引 |
9.3 append添加数据
| df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d']) |
| df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d']) |
| df3 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d']) |
| s1 = pd.Series([1,2,3,4], index=['a','b','c','d']) |
| |
| res=df1.append(df2,ignore_index=True) |
| print(res) |

| res=df1.append(s1,ignore_index=True) |
| print(res) |

10.Pandas合并merge
10.1 依据一组key合并
| left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], |
| 'A': ['A0', 'A1', 'A2', 'A3'], |
| 'B': ['B0', 'B1', 'B2', 'B3']}) |
| print(left) |

| right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], |
| 'C': ['C0', 'C1', 'C2', 'C3'], |
| 'D': ['D0', 'D1', 'D2', 'D3']}) |
| print(right) |

| res=pd.merge(left,right,on='key') |
| print(res) |

10.2 依据两组key合并
| left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'], |
| 'key2': ['K0', 'K1', 'K0', 'K1'], |
| 'A': ['A0', 'A1', 'A2', 'A3'], |
| 'B': ['B0', 'B1', 'B2', 'B3']}) |
| print(left) |

| right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'], |
| 'key2': ['K0', 'K0', 'K0', 'K0'], |
| 'C': ['C0', 'C1', 'C2', 'C3'], |
| 'D': ['D0', 'D1', 'D2', 'D3']}) |
| print(right) |

| res=pd.merge(left,right,on=['key1','key2'],how='inner') |
| print(res) |

| res=pd.merge(left,right,on=['key1','key2'],how='outer') |
| print(res) |

| res=pd.merge(left,right,on=['key1','key2'],how='left') |
| print(res) |

| res=pd.merge(left,right,on=['key1','key2'],how='right') |
| print(res) |

10.3 Indicator合并
| df1 = pd.DataFrame({'col1':[0,1], 'col_left':['a','b']}) |
| print(df1) |

| df2 = pd.DataFrame({'col1':[1,2,2],'col_right':[2,2,2]}) |
| print(df2) |

| res=pd.merge(df1,df2,on='col1',how='outer',indicator=True) |
| print(res) |

| res = pd.merge(df1, df2, on='col1', how='outer', indicator='indicator_column') |
| print(res) |

10.4 依据index合并
| left = pd.DataFrame({'A': ['A0', 'A1', 'A2'], |
| 'B': ['B0', 'B1', 'B2']}, |
| index=['K0', 'K1', 'K2']) |
| print(left) |

| right = pd.DataFrame({'C': ['C0', 'C2', 'C3'], |
| 'D': ['D0', 'D2', 'D3']}, |
| index=['K0', 'K2', 'K3']) |

| res=pd.merge(left,right,left_index=True,right_index=True,how='outer') |
| print(res) |

| res=pd.merge(left,right,left_index=True,right_index=True,how='inner') |
| print(res) |

本文所有代码在此买 免费下载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步