数据分析基础操作学习---Pandas篇

pandas的优势:可以处理非数值型的数据

pandas中的常见数据类型:Series  ---  一维,带标签的数组

                                            DataFrame --- 二维,Series容器

Series部分

  • Series的创建:

第一种方法:通过Series(列表)创建

In [1]: import pandas as pd
        t = pd.Series([2,4,5,6,7])
        t

Out[1]: 0    2
        1    4
        2    5
        3    6
        4    7
        dtype: int64

第一列为自动生成的数据索引,可以通过设置index参数进行指定,需要保证index长度与数据长度相同。

In [1]: import pandas as pd
        t = pd.Series([2,4,5,6,7],index=list("abcde"))
        t

Out[1]: a    2
        b    4
        c    5
        d    6
        e    7
        dtype: int64

第二种方法:通过字典创建

通过调用Series方法并传入一个字典,会自动把字典的key设置为索引,value设置为值

In [2]: import pandas as pd
        temp_dict = {"name":"zyd","age":25,"tel":10086}
        t = pd.Series(temp_dict)
        t

Out[2]: name    zyd
        age      25
        tel   10086
        dtype: object

在Series创建完成后,无法再次通过series的方法给数组中的数改索引,只能输出有目标索引的数据,其他数据变成NAN

  • Series的访问: 

Series有两个属性:index 和 value,类似于字典

series.value 是 np.array类型的数据

大部分关于value的操作与numpy中的相似。

关于where的用法有所不同:

In [1]: a = pd.Series(range(5))
        a.where(a > 0)
Out[1]: 0   NAN
        1   1.0
        2   2.0
        3   3.0
        4   4.0


In [2]: a.where(a > 1,10)
Out[2]: 0   10.0
        1   10.0
        2   2.0
        3   3.0
        4   4.0
  • Pandas读取外部数据:

pd.read_csv()方法----读取csv中的文件内容

pd.read_clipboard()方法----读取剪切板中的内容

DataFrame部分

  • 创建DataFrame
In [1]: pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))
Out[1]: 
        w	x	y	z
    a	0	1	2	3
    b	4	5	6	7
    c	8	9	10	11

通过index和columns参数设置行和列的索引

通过字典创建:

 DataFrame的内置函数:

df.info()----可以查看当前df的属性,包括每一列的数量和数据类型等

df.describe()----返回当前df中数字列的相关统计情况*(max/min/mean/std)

df.shape----df的形状

df.dtypes----列数据类型

df.ndim----数据维度

df.index----行索引

df.columns----列索引

df.values----对象值,返回二维ndarray数组

dataframe中排序的方法df.sort_values(by="",ascending=True)

  • DataFrame中切片取行取列索引的方法:

pandas取行或列的注意事项:① 【】中写数字表示取行,行操作

                                                ② 【】中写字符串表示取列,列操作

要取某一行某一列,可以通过loc和iloc的方法:

'''
df.loc()   ------ 按标签进行索引
df.iloc()  ------ 按位置进行索引
'''

In [1]: import pandas as pd

In [2]: t = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("XYWZ"))

In [3]: t

Out[3]:
    X   Y   W   Z
a   0   1   2   3
b   4   5   6   7
c   8   9  10  11

In [4]: t.loc["a","Y"]

Out[4]: 1

In [5]: t.loc["a",["W","Z"]]

Out[5]: 
W   2
Z   7
Name: a, dtype: int64

In [6]: t.loc[["a"],["W","Z"]]

Out[6]: 
    W    Z
a   2    7
  • DataFrame中利用bool索引进行选择的问题

① 单个判断条件

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(12).reshape(4,3),index=list("abcd"),columns=list("XYZ"))

## 找出X列大于3的所有数据
print(df[df["X"]>3])

② 多个判断条件

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(12).reshape(4,3),index=list("abcd"),columns=list("XYZ"))

## 找出X列大于3并且小于9的所有数据  这里的“和”不能用“and”,必须用“&”,同理,“或”需要用“|”
## 不同判断条件需要用括号括起来
print(df[(df["X"]>3) & (df["X"]<9)])
  • DataFrame中的字符串方法:

  •  关于缺失数据处理的内容:

数据缺失通常会有两种情况:一种为空,None等,在pandas中显示为NaN

                                               一种是使其为0,但在为0时并不一定全为缺失值

① 判断是否需要处理,即是否存在NaN数据

pd.isnull(df)
## 会返回bool数组,为NaN的地方显示为True,其余为False

② 怎么处理?

第一种方法:把缺失数据删掉,即不取缺失数据所在的行

df[pd.notnull(df)] ##只取没有NaN的数据行
df.dropna(axis=0,how="any",inplace=False) 
##参数设置:axis为轴,how可以设置为"all"或者“any”,表示删除的依据。
##any为只要存在就删掉,all为全为NaN时删除。inplace为是否在原数组上修改

第二种方法:填充数据,给NaN赋值

df.fillna(df.mean())

如果数据中用0来表示缺失,可以在处理的时候用:

df[df==0]=np.nan

进行处理。因为NaN的类型,pandas在计算平均值等时会自动略过,不参与运算,不会对结果产生影响。

Pandas常用的统计方法

df.mean() ##求平均
df[].unique() ##会返回一个没有重复元素的列表,类似于set的功能
df[].str.split() ##df的字符串方法

练习:了解一组电影数据的rating和runtime的分布情况

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

file_path = "F:/拜师培训/基础操作/21-数据分析资料/数据分析资料/day05/code/IMDB-Movie-Data.csv"

df = pd.read_csv(file_path)
print(df.head(1))
print(df.info())

##rating,分布情况
##选择图像 直方图
##准备数据
runtime_data = df["Runtime (Minutes)"].values

max_runtime = runtime_data.max()
min_runtime = runtime_data.min()

##直方图绘制
##计算组数
d = 5
print(max_runtime-min_runtime)
num_bins = (max_runtime-min_runtime)//d

plt.figure(figsize=(20,8))
plt.hist(runtime_data,bins=num_bins)
plt.xticks(range(min_runtime,max_runtime+5,5))
plt.show()

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值