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