关于python:Python之Pandas总结

41次阅读

共计 5382 个字符,预计需要花费 14 分钟才能阅读完成。

1.Pandas 简述

  • Pandas 是 Python 的一个数据分析包,该工具为解决数据分析工作而创立。
  • Pandas 纳入大量库和规范数据模型,提供高效的操作数据集所需的工具。
  • Pandas 提供大量能使咱们疾速便捷地解决数据的函数和办法。
  • Pandas 是字典模式,基于 NumPy 创立,让 NumPy 为核心的利用变得更加简略。

2.Pandas 装置

pip3 install pandas

3.Pandas 引入

import pandas as pd  #为了不便实用 pandas 采纳 pd 简写 

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])
#nan(NAN,Nan):not a number 示意不是一个数字,np.nan 是一个 float 类型的数据
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'])# 生成 6 行 4 列地位
print(df)# 输入 6 行 4 列的表格 

print(df['B'])

# 创立特定数据的 DataFrame
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.dtypes) #输入数据类型 

print(df_1.index)# 行的序号 

print(df_1.columns)# 列的序号名字 

print(df_1.values)# 把每个值进行打印进去 

print(df_1.describe())# 数字总结 

print(df_1.T)# 翻转数据,行列对调 

print(df_1.sort_index(axis=1, ascending=False))
#axis 等于 1 按列进行排序 如 ABCDEFG 而后 ascending 顺叙进行显 

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'])# 生成 6 行 4 列地位
print(df)

5.1 抉择某行或某列

print(df['A'])# 或者 df.A 抉择某列 

5.2 切片抉择

print(df[0:3], df['20180310':'20180314'])
#两次进行抉择 第一次切片抉择 第二次依照筛选条件进行抉择 

5.3 依据标签 loc- 行标签进行抉择数据

print(df.loc['20180312', ['A','B']])# 依照行标签进行抉择 准确抉择 

5.4 依据序列 iloc- 行号进行抉择数据

print(df.iloc[3, 1])# 输入第三行第一列的数据 

print(df.iloc[3:5,0:2])# 进行切片抉择 

print(df.iloc[[1,2,4],[0,2]])# 进行不间断筛选 

5.5 依据判断筛选

print(df[df.A > 0])# 筛选出 df.A 大于 0 的元素 布尔条件筛选 

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 依据条件设置

df[df.A>0]=999# 将 df.A 大于 0 的值扭转
print(df)

6.3 依据行或列设置

df['F']=np.nan
print(df)

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))# 将 NaN 值替换为 0 

7.4 应用 isnull() 函数判断数据是否失落

print(pd.isnull(df))# 矩阵用布尔来进行示意 是 nan 为 ture 不是 nan 为 false

print(np.any(df.isnull()))# 判断数据中是否会存在 NaN 值 

8.Pandas 导入导出

pandas 能够读取与存取像 csv、excel、json、html、pickle 等格局的材料,具体阐明请看官网材料

data=pd.read_csv('test1.csv')# 读取 csv 文件
data.to_pickle('test2.pickle')# 将材料存取成 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)#0 示意竖项合并 1 示意横项合并 ingnore_index 重置序列 index index 变为 0 1 2 3 4 5 6 7 8
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)

print(df2)

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)# 将 df2 合并到 df1 的上面 并重置 index
print(res)

res=df1.append(s1,ignore_index=True)# 将 s1 合并到 df1 上面 并重置 index
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)# 根据 col1 进行合并 并启用 indicator=True 输入每项合并形式
print(res)

res = pd.merge(df1, df2, on='col1', how='outer', indicator='indicator_column')# 自定义 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')# 依据 index 索引进行合并 并抉择外联结并
print(res)

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

正文完
 0