Pandas快速入门

Pandas快速入门

Pandas 是 Python 语言的一个扩展程序库,用于数据分析。
Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。
Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。

一、Pandas Series

Pandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。

Series 由索引(index)和列组成,函数如下:

pandas.Series( data, index, dtype, name, copy)

参数说明

  • data:一组数据(ndarray 类型)。

  • index:数据索引标签,如果不指定,默认从 0 开始。

  • dtype:数据类型,默认会自己判断。

  • name:设置名称。

  • copy:拷贝数据,默认为 False。

import pandas as pd

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

0 1
1 2
2 3
dtype: int64

如果没有指定索引,索引值就从 0 开始,我们可以根据索引值读取数据。

创建Series

使用 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 变成了索引值。

二、Pandas DataFrame

DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。

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

使用列表创建
import pandas as pd

data = [['Google',10],['Runoob',12],['Wiki',13]]
df = pd.DataFrame(data,columns=['Site','Age'],dtype=float)
print(df)
     Site   Age
0  Google  10.0
1  Runoob  12.0
2    Wiki  13.0
使用字典创建
import pandas as pd

data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print (df)
   a   b     c
0  1   2   NaN
1  5  10  20.0

没有对应的部分数据为 NaN。

返回指定行数据

Pandas 可以使用 loc 属性返回指定行的数据,如果没有设置索引,第一行索引为 0,第二行索引为 1,以此类推。

import pandas as pd

data = {
  "calories": [420, 380, 390],
  "duration": [50, 40, 45]
}

df = pd.DataFrame(data)
print(df.loc[0]) # 返回第一行
print(df.loc[1]) # 返回第二行

输出结果如下:

calories 420
duration 50
Name: 0, dtype: int64
calories 380
duration 40
Name: 1, dtype: int64

三、Pandas CSV

CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。

Pandas 可以很方便的处理 CSV 文件。

pandas.to_string()

import pandas as pd

df = pd.read_csv('nba.csv')
print(df.to_string())

to_string() 用于返回 DataFrame 类型的数据,如果不使用该函数,则输出结果为数据的前面 5 行和末尾 5 行,中间部分以 … 代替。

pandas.to_csv()

to_csv() 方法将 DataFrame 存储为 csv 文件

import pandas as pd
   
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')

打开 site.csv 文件,显示结果如下:

,name,site,age
0,Google,www.google.com,90
1,Runoob,www.runoob.com,40
2,Taobao,www.taobao.com,80
3,Wiki,www.wikipedia.org,98

head()

head( n ) 方法用于读取前面的 n 行,如果不填参数 n ,默认返回 5 行。
实例:读取前五行

import pandas as pd

df = pd.read_csv('nba.csv')
print(df.head())

tail()

tail( n ) 方法用于读取尾部的 n 行,如果不填参数 n ,默认返回 5 行,空行各个字段的值返回 NaN。
实例:读取末尾五行

import pandas as pd

df = pd.read_csv('nba.csv')
print(df.tail())

info()

info() 方法返回表格的一些基本信息:

import pandas as pd

df = pd.read_csv('nba.csv')
print(df.info())

输出结果为:

<class 'pandas.core.frame.DataFrame'>
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数据清洗

数据清洗是对一些没有用的数据进行处理的过程。
很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要对使数据分析更加准确,就需要对这些没有用的数据进行处理。

4.1 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,修改的是源数据。

实例:演示删除包含空数据的行

import pandas as pd

df = pd.read_csv('property-data.csv')

new_df = df.dropna()
print(new_df.to_string())

注意:默认情况下,dropna() 方法返回一个新的 DataFrame,不会修改源数据。
如果你要修改源数据 DataFrame, 可以使用 inplace = True 参数。

isnull()

isnull() 判断各个单元格是否为空

import pandas as pd

df = pd.read_csv('property-data.csv')
print (df['NUM_BEDROOMS'])
print (df['NUM_BEDROOMS'].isnull())
fillna()

fillna() 方法来替换一些空字段。
替换空单元格的常用方法是计算列的均值、中位数值或众数。
Pandas使用 mean()、median() 和 mode() 方法计算列的均值、中位数值和众数。

实例:使用 mean() 方法计算列的均值并替换空单元格

import pandas as pd

df = pd.read_csv('property-data.csv')
x = df["ST_NUM"].mean()
df["ST_NUM"].fillna(x, inplace = True)
print(df.to_string())
get_dummies()

get_dummies 是利用pandas实现one hot encode的方式。

pandas.get_dummies(data, prefix=None, prefix_sep=’_’, dummy_na=False, columns=None, sparse=False, drop_first=False)

参数说明:

  • data : array-like, Series, or DataFrame:输入的数据
  • prefix : string, list of strings, or dict of strings, default None:get_dummies转换后,列名的前缀
  • columns : list-like, default None:指定需要实现类别转换的列名
  • dummy_na : bool, default False
    增加一列表示空缺值,如果False就忽略空缺值
  • drop_first : bool, default False:获得k中的k-1个类别值,去除第一个
import pandas as pd

df = pd.DataFrame([  
            ['green' , 'A'],   
            ['red'   , 'B'],   
            ['blue'  , 'A']])  

df.columns = ['color',  'class'] 
print(df)
print(pd.get_dummies(df))
   color class
0  green     A
1    red     B
2   blue     A
   color_blue  color_green  color_red  class_A  class_B
0           0            1          0        1        0
1           0            0          1        0        1
2           1            0          0        1        0

4.2 Pandas 清洗格式错误数据

数据格式错误的单元格会使数据分析变得困难,甚至不可能。
我们可以通过包含空单元格的行,或者将列中的所有单元格转换为相同格式的数据。
实例:格式化日期

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())

输出结果如下:

           Date  duration
day1 2020-12-01        50
day2 2020-12-02        40
day3 2020-12-26        45

4.3 Pandas 清洗错误数据

数据错误也是很常见的情况,我们可以对错误的数据进行替换或移除。
实例:将 age 大于 120 的删除

import pandas as pd

person = {
  "name": ['Google', 'Runoob' , 'Taobao'],
  "age": [50, 40, 12345]    # 12345 年龄数据是错误的
}

df = pd.DataFrame(person)

for x in df.index:
  if df.loc[x, "age"] > 120:
    df.drop(x, inplace = True)

print(df.to_string())

4.4 Pandas 清洗重复数据

如果我们要清洗重复数据,可以使用 duplicated() 和 drop_duplicates() 方法。

如果对应的数据是重复的,duplicated() 会返回 True,否则返回 False。

import pandas as pd

person = {
  "name": ['Google', 'Runoob', 'Runoob', 'Taobao'],
  "age": [50, 40, 40, 23]  
}
df = pd.DataFrame(person)

print(df.duplicated())

输出结果如下:

0 False
1 False
2 True
3 False
dtype: bool

删除重复数据,可以直接使用drop_duplicates() 方法。

import pandas as pd

persons = {
  "name": ['Google', 'Runoob', 'Runoob', 'Taobao'],
  "age": [50, 40, 40, 23]  
}

df = pd.DataFrame(persons)

df.drop_duplicates(inplace = True)
print(df)

输出结果如下

     name  age
0  Google   50
1  Runoob   40
3  Taobao   23
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值