概述
Pyanda是python的一个扩展程序库,用于数据分析
Pandas 应用
Pandas 的主要数据结构是 Series (一维数据)与 DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。
数据结构
Series 是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
安装
pip install pandas
Pandas 数据结构—-Series
Pandas Series类似表格中的一个列,类似于一维数组,可以保存任何数据类型
Series由索引(index)和列组成,函数如下:
pandas.Series(data,index,dtype,name,copy)
参数说明:
- data:一组数据(ndarray 类型)。
- index:数据索引标签,如果不指定,默认从 0 开始。
- dtype:数据类型,默认会自己判断。
- name:设置名称。
- copy:拷贝数据,默认为 False。 ```python import pandas as pd
a = [1, 2, 3]
myvar = pd.Series(a)
print(myvar)

```python
print(myvar[1])
输出结果如下:
2
为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
我们也可以使用 key/value 对象,类似字典来创建 Series:
import pandas as pd
sites = {1: "Google", 2: "Runoob", 3: "Wiki"}
myvar = pd.Series(sites)
print(myvar)
1 Google
2 Runoob
3 Wiki
dtype: object
可见,字典的key就成了索引值
设置Series 名称参数
import pandas as pd
sites = {1: "Google", 2: "Runoob", 3: "Wiki"}
myvar = pd.Series(sites, index = [1, 2], name="RUNOOB-Series-TEST" )
print(myvar)
Pandas 数据结构—-DataFrame
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
构造:
pandas.DataFrame( data, index, columns, dtype, copy)
参数说明:
- data:一组数据(ndarray、series, map, lists, dict 等类型)。
- index:索引值,或者可以称为行标签。
- columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
- dtype:数据类型。
- copy:拷贝数据,默认为 False。
使用列表创建
import pandas as pd
data = [['Google',10],['Runoob',12],['Wiki',13]]
df = pd.DataFrame(data,columns=['Site','Age'],dtype=float)
print(df)
Site Age<br />0 Google 10.0<br />1 Runoob 12.0<br />2 Wiki 13.0
使用ndarrays 创建
import pandas as pd
data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]}
df = pd.DataFrame(data)
print (df)
Site Age<br />0 Google 10<br />1 Runoob 12<br />2 Wiki 13<br />从以上输出结果可以知道, DataFrame 数据类型一个表格,包含 rows(行) 和 columns(列):<br />
还可以使用字典(key/value),其中字典的 key 为列名:
import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print (df)
a b c <br />0 1 2 NaN<br />1 5 10 20.0
Pandas 可以使用 loc 属性返回指定行的数据,如果没有设置索引,第一行索引为 0,第二行索引为 1,以此类推:
import pandas as pd
data = {
"calories": [420, 380, 390],
"duration": [50, 40, 45]
}
# 数据载入到 DataFrame 对象
df = pd.DataFrame(data)
print(df)
# 返回第一行
print(df.loc[0])
# 返回第二行
print(df.loc[1])
calories duration
0 420 50
1 380 40
2 390 45
calories 420
duration 50
Name: 0, dtype: int64
calories 380
duration 40
Name: 1, dtype: int64
返回多行数据
import pandas as pd
data = {
"calories": [420, 380, 390],
"duration": [50, 40, 45]
}
# 数据载入到 DataFrame 对象
df = pd.DataFrame(data)
print(df)
# 返回第一行和第二行
print(df.loc[[0, 1]])
calories duration
0 420 50
1 380 40
2 390 45
calories duration
0 420 50
1 380 40
Pandas CSV文件
CSV :comma-separated values,都好分隔值
CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
CSV 是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。
读取文件
import pandas as pd
df = pd.read("nba.csv")
print(df)
print(df.to_string())
to_string() 用于返回 DataFrame 类型的数据,如果不使用该函数,则输出结果为数据的前面 5 行和末尾 5 行,中间部分以 … 代替。
Name Team Number Position Age Height Weight College Salary
0 Avery Bradley Boston Celtics 0.0 PG 25.0 6-2 180.0 Texas 7730337.0
1 Jae Crowder Boston Celtics 99.0 SF 25.0 6-6 235.0 Marquette 6796117.0
2 John Holland Boston Celtics 30.0 SG 27.0 6-5 205.0 Boston University NaN
3 R.J. Hunter Boston Celtics 28.0 SG 22.0 6-5 185.0 Georgia State 1148640.0
4 Jonas Jerebko Boston Celtics 8.0 PF 29.0 6-10 231.0 NaN 5000000.0
.. … … … … … … … … …
453 Shelvin Mack Utah Jazz 8.0 PG 26.0 6-3 203.0 Butler 2433333.0
454 Raul Neto Utah Jazz 25.0 PG 24.0 6-1 179.0 NaN 900000.0
455 Tibor Pleiss Utah Jazz 21.0 C 26.0 7-3 256.0 NaN 2900000.0
456 Jeff Withey Utah Jazz 24.0 C 26.0 7-0 231.0 Kansas 947276.0
457 NaN NaN NaN NaN NaN NaN NaN NaN NaN
将dataframe存储为csv文件
import pandas as pd
# 三个字段 name, site, age
nme = ["Google", "Runoob", "Taobao", "Wiki"]
st = ["www.google.com", "www.runoob.com", "www.taobao.com", "www.wikipedia.org"]
ag = [90, 40, 80, 98]
dict = {"name":nme, "site":st, "age":ag}
df = pd.Dataframe(dict)
df.to_csv('site.csv')
可以使用 to_csv() 方法将 DataFrame 存储为 csv 文件
数据处理
head()
head(n)方法用于读取前n行,如果没有参数n,则默认返回5行
import pandas as pd
df = pd.read_csv("nba.csv")
print(df.head(3))
print(df.head())
Name Team Number Position Age Height Weight College Salary<br />0 Avery Bradley Boston Celtics 0.0 PG 25.0 6-2 180.0 Texas 7730337.0<br />1 Jae Crowder Boston Celtics 99.0 SF 25.0 6-6 235.0 Marquette 6796117.0<br />2 John Holland Boston Celtics 30.0 SG 27.0 6-5 205.0 Boston University NaN<br /> Name Team Number Position Age Height Weight College Salary<br />0 Avery Bradley Boston Celtics 0.0 PG 25.0 6-2 180.0 Texas 7730337.0<br />1 Jae Crowder Boston Celtics 99.0 SF 25.0 6-6 235.0 Marquette 6796117.0<br />2 John Holland Boston Celtics 30.0 SG 27.0 6-5 205.0 Boston University NaN<br />3 R.J. Hunter Boston Celtics 28.0 SG 22.0 6-5 185.0 Georgia State 1148640.0<br />4 Jonas Jerebko Boston Celtics 8.0 PF 29.0 6-10 231.0 NaN 5000000.0
tail()
tail( n ) 方法用于读取尾部的 n 行,如果不填参数 n ,默认返回 5 行,空行各个字段的值返回 NaN。
import pandas as pd
df = pd.read_csv("nba.csv")
print(df.tail(3))
print(df.tail())
Name Team Number Position Age Height Weight College Salary<br />455 Tibor Pleiss Utah Jazz 21.0 C 26.0 7-3 256.0 NaN 2900000.0<br />456 Jeff Withey Utah Jazz 24.0 C 26.0 7-0 231.0 Kansas 947276.0<br />457 NaN NaN NaN NaN NaN NaN NaN NaN NaN<br /> Name Team Number Position Age Height Weight College Salary<br />453 Shelvin Mack Utah Jazz 8.0 PG 26.0 6-3 203.0 Butler 2433333.0<br />454 Raul Neto Utah Jazz 25.0 PG 24.0 6-1 179.0 NaN 900000.0<br />455 Tibor Pleiss Utah Jazz 21.0 C 26.0 7-3 256.0 NaN 2900000.0<br />456 Jeff Withey Utah Jazz 24.0 C 26.0 7-0 231.0 Kansas 947276.0<br />457 NaN NaN NaN NaN NaN NaN NaN NaN NaN
info()
info()方法用于返回表格的一些基本信息
import pandas as pd
df = pd.read_csv("nba.csv")
print(df.info())
RangeIndex: 458 entries, 0 to 457 # 行数,458 行,第一行编号为 0
Data columns (total 9 columns): # 列数,9列
# Column Non-Null Count Dtype # 各列的数据类型 —- ——— ——————— ——-
0 Name 457 non-null object
1 Team 457 non-null object
2 Number 457 non-null float64
3 Position 457 non-null object
4 Age 457 non-null float64
5 Height 457 non-null object
6 Weight 457 non-null float64
7 College 373 non-null object # non-null,意思为非空的数据
8 Salary 446 non-null float64
dtypes: float64(4), object(5) # 类型
Pandas JSON
JSON(JavaScript Object Notation,JavaScript 对象表示法),是存储和交换文本信息的语法,类似 XML。
import pandas as pd
df = pd.read_json('sites.json')
print(df.to_string())
数据清洗
Pandas清洗空值
如果我们要删除包含空字段的行,可以使用 dropna() 方法,语法格式如下:
DataFrame.dropna(axis=0, how=’any’, thresh=None, subset=None, inplace=False)
参数说明:
- axis:默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。
- how:默认为 ‘any’ 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 how=’all’ 一行(或列)都是 NA 才去掉这整行。
- thresh:设置需要多少非空值的数据才可以保留下来的。
- subset:设置想要检查的列。如果是多个列,可以使用列名的 list 作为参数。
- inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。
Pandas 清洗格式错误数据
```python import pandas as pd
第三个日期格式错误
data = { “Date”: [‘2020/12/01’, ‘2020/12/02’ , ‘20201226’], “duration”: [50, 40, 45] }
df = pd.DataFrame(data, index = [“day1”, “day2”, “day3”])
df[‘Date’] = pd.to_datetime(df[‘Date’])
print(df.to_string())
<a name="d9wOW"></a>
### Pandas 清洗错误数据
```python
import pandas as pd
person = {
"name": ['Google', 'Runoob' , 'Taobao'],
"age": [50, 40, 12345] # 12345 年龄数据是错误的
}
df = pd.DataFrame(person)
df.loc[2, 'age'] = 30 # 修改数据
print(df.to_string())
Pandas 清洗重复数据
如果我们要清洗重复数据,可以使用 duplicated() 和 drop_duplicates() 方法。
如果对应的数据是重复的,duplicated() 会返回 True,否则返回 False。