一、什么是pandas?
pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language.
二、常用数据类型
1、 Series 一维,带标签数组
2、DataFrame 二维,Series容器
三、Series的创建(两种方法)
import string
import pandas as pd
import numpy as np
# 创建数组(1)
t = pd.Series(np.arange(10), index=list(string.ascii_uppercase[:10]))
# 创建数组(2)
a = {string.ascii_uppercase[i]: i for i in range(10)}
t1 = pd.Series(a)
# 更改索引号的变化情况
t2 = pd.Series(a, index=list(string.ascii_uppercase[5:15]))
print(t2)
运行结果 :(t2更改索引后,因为原数组K-O没值,所以显示NAN,且数据类型变为FLOAT)
四、切片(使用[ ])和索引(数组名.index)(数组名.values)
import string
import pandas as pd
import numpy as np
a = {'name': 'liming', 'age': 25, 'des': '学生'}
t = pd.Series(a)
# 切片
# 连续
# print(t[1:2])
# 不连续
# print(t[[0, 2]])
# bool
# print(t[t > 4])
# 不存在的索引(标签正常显示,值为NAN)
# print(t[["name"]])
### 索引(index)
#print(t.index)
# values
print(t.values)
五、pandas读取外部数据(DataFrame)
import pandas as pd
# pandas读取外部数据
df = pd.read_csv("./dogNames2.csv")
# pandas读数据库数据(Mysql)
# pd.read_sql(sql_sentence, connection)
# pandas读数据库数据(MongoDB)
# print(df)
# DataFrame
# 获取需要的data
data = pd.read_csv("./youtube_video_data/USvideos.csv")
df = pd.DataFrame(data)
#print(df)
# 显示前几行(默认前5行)
#print(df.head())
#print("*"*100)
# 显示后几行(默认前5行)
#print(df.tail())
# 显示概览
#print(df.info())
print(df.describe())
5.1 pandas排序(sort_values)
sort_values(by , ascending as )
by:数据的title;ascending:排序方式(true升序,False降序)
5.2 pandas 取行取列(【】)
df[:20]["Row_Labels"]
5.3 loc方法(索引)
t3 = pd.DataFrame(np.arange(12).reshape(3, 4), index=list("abc"), columns=list("WXYZ"))
# print(t3.loc["a", "Z"])
# 取列
# print(t3.loc[:, "Z"])
# 取行
# print(t3.loc["a", :])
# 取多行
print(t3.loc[["a", "c"]])
# 取多列
print(t3.loc[:, ["X", "Y"]])
5.3 iloc方法
# iloc取数据
# 取行
#print(t3.iloc[1, :])
# 取列
print(t3.iloc[:, [2, 1]])
5.4 bool索引(与numpy相似)
六、处理NAN
6.1 删除
dropna(axis= , how = , inplace = ) axis代表行、列;how代表删除方式(默认为any);inplace原地替换
6.2 填充
# 填充
# fillna()
#print(t3.fillna(t3.mean()))
print(t3["Y"].fillna(t3["Y"].mean()))# 填充
# fillna()
#print(t3.fillna(t3.mean()))
print(t3["Y"].fillna(t3["Y"].mean()))
6.3处理0(直接赋值为NAN) 因为NAN不参与运算
Q对于这一组电影数据,如果我们想rating,runtime的分布情况,应该如何呈现数据?
import matplotlib
import numpy as np
from matplotlib import pyplot as plt
import pandas as pd
# 设置中文字体
font = {'family': 'MicroSoft YaHei',
'weight': 'bold'}
matplotlib.rc("font", **font)
# 设置图片大小
plt.figure(figsize=(20, 8), dpi=80)
file_path = "./IMDB-Movie-Data.csv"
df = pd.read_csv(file_path)
print(df.head(1))
print(df.info())
# Rating,Runtime分布情况
# 选择图形,直方图
# 准备数据
runtime_data = df["Runtime (Minutes)"].values
max_runtime = runtime_data.max()
min_runtime = runtime_data.min()
# 计算组数
d = 5 # 组距
num_bin = (max_runtime - min_runtime) // d
plt.hist(runtime_data, num_bin)
plt.xticks(range(min_runtime, max_runtime+d, d))
plt.grid()
plt.show()
结果