[Python进阶] 数据处理:Pandas入门

10.4 Pandas

介绍:
Pandas 是 Python 语言的一个扩展程序库,用于数据分析。Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。Pandas 名字衍生自术语 “panel data”(面板数据)和 “Python data analysis”(Python 数据分析)。Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)。
Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。Pandas 广泛应用在学术、金融、统计学等各个数据分析领域。
安装pandas:

pip install pandas

10.4.1 数据结构

Series
是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。
简单的来说series就是字典和列表的结合体。拥有顺序的字典。
DataFrame
是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。
DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。

10.4.2 Series的创建

pandas.Series()
功能:
创建一个Series数据。
语法:
pandas.Series(data, index, dtype, name, copy)
参数:
data 一组数据(ndarray类型)。
index 数据索引标签,如果不指定,默认从 0 开始。
dtype 数据类型,默认会自己判断。
name 设置名称。
copy 拷贝数据,默认为 False。
示例:创建一个简单的series

import pandas as pd

a = [1, 2, 3]
myvar = pd.Series(a)
print(myvar)

0 1
1 2
2 3
dtype: int64

示例:创建一个带索引标签的series

import pandas as pd

a = ["Google", "Runoob", "Wiki"]
myvar = pd.Series(a, index=["x", "y", "z"])
print(myvar)

x Google
y Runoob
z Wiki
dtype: object

注意:标签最好不要设置成数字
示例:通过字典方式创建series

import pandas as pd

sites = {'a': "Google", 'b': "Runoob", 'c': "Wiki"}
myvar = pd.Series(sites)
print(myvar)

a Google
b Runoob
c Wiki
dtype: object

10.4.3 Series的查询

import pandas as pd

a = ["Google", "Runoob", "Wiki"]
myvar = pd.Series(a, index=["x", "y", "z"])
print(myvar)
print(myvar[0])  # 通过索引值获取
print(myvar['y'])  # 通过索引标签获取

x Google
y Runoob
z Wiki
dtype: object
Google
Runoob

10.4.4 Series数据的常见操作

创建Series:使用pandas.Series()函数创建Series对象。可以通过传入一组数据或者一个字典来创建Series对象。
索引操作:使用索引可以访问和修改Series中的数据。可以使用iloc和loc方法按位置和标签进行索引。
切片操作:可以使用切片语法对Series进行切片操作,返回一个新的Series对象。
统计操作:可以使用许多统计函数对Series进行统计操作,如count、sum、mean、std等。
合并操作:可以使用concat()函数将多个Series对象合并成一个DataFrame对象。
转换操作:可以使用许多函数将Series对象转换为其他数据类型,如DataFrame、NumPy数组等。
分组操作:可以使用groupby()方法对Series进行分组操作,并计算每个组的统计指标。
筛选操作:可以使用许多筛选函数对Series进行筛选操作,如loc、iloc、isin等。
映射操作:可以使用map()方法对Series进行映射操作,将一个函数应用于每个元素。
排序操作:可以使用sort_values()方法对Series进行排序操作,返回一个新的Series对象。

10.4.5 dataframe的创建

pandas.DataFrame()
功能:
创建一个DataFrame数据。
语法:
pandas.DataFrame(data, index, columns, dtype, copy)
参数:
data 一组数据(ndarray、series, map, lists, dict 等类型)。
index 索引值,或者可以称为行标签。
columns 列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
dtype 数据类型。
copy 拷贝数据,默认为 False。
返回:
DataFrame数据。
说明:
DataFrame 是一个二维的数组结构,类似二维数组。
方式一:通过读取excel表格创建
import pandas as pd

df = pd.read_excel(‘test.xlsx’)
print(df)

**`方式二:使用二维列表创建`**
import pandas as pd

data = [['Google', 10], ['Runoob', 12], ['Wiki', 13]]
df = pd.DataFrame(data, columns=['Site', 'Age'])
print(df)
   Site  Age

0 Google 10
1 Runoob 12
2 Wiki 13

方式三:使用字典创建
import pandas as pd

data = {‘Site’: [‘Google’, ‘Runoob’, ‘Wiki’], ‘Age’: [10, 12, 13]}
df = pd.DataFrame(data)
print(df)

>	     Site  Age
>	0  Google   10
>	1  Runoob   12
>	2    Wiki   13

### 10.4.6 dataframe的增加
**`插入一列:`**
insert(ioc,column,value)
ioc			要插入的位置
colunm		列名
value		值
```py
import pandas as pd

data = {'Site': ['Google', 'Runoob', 'Wiki'], 'Age': [10, 12, 13]}
df = pd.DataFrame(data)
print(df)
df.insert(1, 'four', [1, 2, 3])
print(df)
   Site  Age

0 Google 10
1 Runoob 12
2 Wiki 13
Site four Age
0 Google 1 10
1 Runoob 2 12
2 Wiki 3 13

插入一行:

row={‘one’:111,‘two’:222,‘three’:333}
df.loc[1]=row
df.iloc[1]=row
df.ix[1]=row

10.4.7 dataframe的查询

import pandas as pd
data = {
    "calories": [420, 380, 390],
    "duration": [50, 40, 45],
    "apple": [1, 22, 33],
    "red": [3, 3, 1],
}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
print(df)
 calories  duration  apple  red

a 420 50 1 3
b 380 40 22 3
c 390 45 33 1

10.4.7.1 按行读取

方法1:loc['行标签']、loc[['行标签']]、loc[['行标签1','行标签n']]

print(df.loc['b'])  # 返回第二行
print(df.loc[['b']])  # 返回第二行
print(df.loc[['a', 'b']])  # 返回第一行和第二行

calories 380
duration 40
apple 22
red 3
Name: b, dtype: int64


 calories  duration  apple  red

b 380 40 22 3


 calories  duration  apple  red

a 420 50 1 3
b 380 40 22 3

注意:
1、loc[‘行标签’]、loc[[‘行标签’]]返回的数据类型不同。
2、默认的行标签是从0开始的一组整数
方法2:iloc['行号']、iloc[['行号']]、iloc[['行号1','行号n']]

print(df.iloc[0])  # 返回第一行
print(df.iloc[[0]])  # 返回第一行
print(df.iloc[[0, 1]])  # 返回第一行和第二行
df.iloc[:5],读取第0行到第4行的数据;
df.iloc[8:],读取第8行后所有数据,包括第8行;
df.iloc[3,6],读取第3行到第6行的数据,包括第3行但不包括第6行。

注意:iloc[‘行号’]、iloc[[‘行号’]]返回的数据类型不同

10.4.7.2 按列读取

方法1:df.列名

print(df.calories]) # 返回某一列

方法2:df['列名']、df[['列名']]、df[['列名1','列名2','列名n']]

print(df[‘calories’]) # 返回某一列
print(df[[‘calories’]]) # 返回某一列
print(df[[‘calories’, ‘duration’]]) # 返回多个列

注意:df[‘列名’]、df[[‘列名’]]返回的数据类型不同
方法3 .iloc[:,colNo] or .iloc[:,colNo1:colNo2]

df.iloc[:1] # 读取第一列
df.iloc[:,1:3] # 读取第1列到第3列
df.iloc[:,2:] # 读取第2列之后的数据
df.iloc[:,:3] # 读取前3列数据

10.4.7.3 按单元格读取

方法1:df[col][row]、df.col[row]

print(df[‘red’][2])
print(df.red[2])

方法2:.loc
读取单个单元格:

df.loc[row][col]或df.loc[row,col]
print(df.loc[‘a’][1])
print(df.loc[‘a’, 0])

读取一行多列:

df.loc[row][[col1,col2]]
df.loc[1,[col1,col2]]
df.loc[row][firstCol:endCol]
df.loc[row,firstCol:endCol]

读取多行一列:

df.loc[[row1,row2]][col]
df.loc[[row1,row2]].col
df.loc[[row1,row2],col]

读取多行多列:

df.loc[[row1,row2],[col1,col2]]
df.loc[[row1,row2]][[col1,col2]]
df.loc[[row1,row3],firstCol:endCol]

方法3:.iloc
读取一个单元格:

df.iloc[rowNo].col
df.iloc[rowNo][col]
df.iloc[rowNo,colNo]

注意:df.iloc[rowNo,col]不支持
读取一行多列:

df.iloc[rowNo,firestColNo,endColNo]
df.iloc[rowNo][[col1,col2]]
df.iloc[rowNo][firesCol:endCol]

注意:df.iloc[rowNo,[col1,col2]]、df.iloc[rowNo,firstColNo:endColNo]均不支持。
读取多行一列:

df.iloc[[rowNo1,rowNo2],colNo]
df.iloc[firstRowNo:endRowNo,colNo]
df.iloc[[rowNo1,rowNo2]][col]
df.iloc[firstRowNo,endRowNo][col]

读取多行多列:

df.iloc[firstRowNo:endRowNo,firstColNo:endColNo]
df.iloc[[RowNo1,RowNo2],[ColNo1,ColNo2]]
df.iloc[firstRowNo:endRowNo][[col1,col2]]

10.4.8 dataframe的修改

10.4.8.1 按列赋值:

方法一:df.col=colList/colValue 或 df[col]=colList/colValue

df.red=[1,2,3]
df[‘red’]=0

注意:如果用一个列表或数组赋值,其长度必须和df的行数相同。

10.4.8.2 按行赋值

方法一:df.loc[row]=rowList 或 df.loc[row]=rowValue
给多行多列赋值:

df.loc[[row1,row2],[col1,col2]]=value/valueList
df.iloc[[rowNo1,rowNo2],[colNo1,colNo2]]=value/valueList
df.iloc[[rowNo1,rowNo2]][[col1,col2]]=value/valueList
df.ix[firstRow:endRow,firstCol:endCol]=value/valueList

说明:DataFrame的读写操作是多变的,这里也仅仅列出了几种常用的方法,熟练一种方式即可。

10.4.9 dataframe的删除

方法:

drop(labels, axis=0, level=None, inplace=False)

参数:
lables:要删除数据的标签
axis:0表示删除行,1表示删除列,默认0
inplace:是否在当前df中执行此操作

10.4.10 DataFrame数据的常见操作

创建DataFrame:使用pandas.DataFrame()函数创建DataFrame对象。可以通过传入一个字典或一个二维数组来创建DataFrame对象。
索引操作:使用索引可以访问和修改DataFrame中的数据。可以使用iloc和loc方法按位置和标签进行索引。
切片操作:可以使用切片语法对DataFrame进行切片操作,返回一个新的DataFrame对象。
统计操作:可以使用许多统计函数对DataFrame进行统计操作,如count、sum、mean、std等。
合并操作:可以使用concat()函数将多个DataFrame对象合并成一个更大的DataFrame对象。
转换操作:可以使用许多函数将DataFrame对象转换为其他数据类型,如Series、NumPy数组等。
分组操作:可以使用groupby()方法对DataFrame进行分组操作,并计算每个组的统计指标。
筛选操作:可以使用许多筛选函数对DataFrame进行筛选操作,如loc、iloc、isin等。
映射操作:可以使用map()方法对DataFrame的每一列进行映射操作,将一个函数应用于每一列的每个元素。
排序操作:可以使用sort_values()方法对DataFrame进行排序操作,返回一个新的DataFrame对象。
透视表操作:可以使用pivot_table()方法创建透视表,对数据进行分组和汇总。
数据透视操作:可以使用pivot()方法将数据透视表转换为DataFrame对象。

  • 39
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

0思必得0

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

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

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

打赏作者

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

抵扣说明:

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

余额充值