pandas学习
numpy能够帮助我们处理数值,但是pandas除了处理数值之外(基于numpy),还能能帮助我们处理其他类型的数据。
常用数据类型有:
- Series一维,带标签(索引)数组
- DataFrame二维,Series容器
pandas之Series创建
-
import pandas as pd t1 = pd.Series([1, 2, 31, 12, 3, 4]) print(t1) print(type(t1))
-
可以指定索引创建Series
-
t2 = pd.Series([1, 23, 2, 2, 1], index=list("abcde")) print(t2)
-
可以传入字典创建Series
-
temp_dict = {"name": "xiaoming", "age": 30, "tel": 10086} t1 = pd.Series(temp_dict) print(t1)
pandas之Series切片和索引
temp_dict = {"name": "xiaoming", "age": 30, "tel": 10086}
t1 = pd.Series(temp_dict)
print(t1["name"])
print(t1[["age", "tel"]])
print(t1.index)
# print(t1[t1>4])
print(t1.values)
print(np.ndarray)
Series对象本质上由两个数组构成
一个数组构成对象的键(index,索引),一个数组构成对象的值(values),键->值
ndarray的很多方法都可以运用series类型,比如argmax,clip
Series具有where方法,但是结果和ndarray不同。
pandas之读取外部数据
df = pd.read_csv("./data")
print(df)
pandas之DataFrame
import pandas as pd
import numpy as np
t1 = pd.DataFrame(np.arange(12).reshape(3, 4))
print(t1)
DataFrame对象既有行索引,又有列索引。
设置索引创建DataFrame对象:
t2 = pd.DataFrame(np.arange(12).reshape(3, 4), index=list("abc"), columns=list("wxyz"))
print(t2)
传入字典创建DataFrame对象:
d1 = {"name": ["xiaoming", "xiaohong"], "age": [20, 32], "tel": [10086, 10010]}
t3 = pd.DataFrame(d1)
print(t3)
d1 = [{"name": "xiaoming", "age": 20, "tel": 10010}, {"name": "xiaohong", "age": 23, "tel": 10086}]
print(d1)
t4 = pd.DataFrame(d1)
print(t4)
基本属性:
d1 = [{"name": "xiaoming", "age": 20, "tel": 10010}, {"name": "xiaohong", "age": 23, "tel": 10086}]
t4 = pd.DataFrame(d1)
print(t4.index) # 行索引
print(t4.columns) # 列索引
print(t4.values) # 对象值
print(t4.shape) # 行数和列数
print(t4.dtypes) # 元素类型
print(t4.ndim) # 维度
DataFrame整体情况查询
t4.head(3) # 显示头部几行,默认5行
t4.tail(3) # 显示末尾几行,默认5行
t4.info() # 相关信息概览:行数,列数,列索引,列非空值个数,列类型,内存占用
t4.describe() # 快速综合统计结果:计数,均值,标准差,最大值,四分位数,最小值
DataFrame对象的切片
# 方括号里写数字,表示取行
print(t4[:1])
# 方括号里写字符串,表示取列
print(t4["name"])
# 取某行某列
print(t4[:1]["name"])
pandas之loc
还有更多的经过pandas优化过的选择方式
- df.loc通过标签索引行数据
- df.iloc通过位置获取行数据
t5 = pd.DataFrame(np.arange(12).reshape(3, 4), index=list("abc"), columns=list("wxyz"))
print(t5)
a = t5.loc["a", "z"]
print(a)
print(t5.loc["a"])
pandas之布尔索引
print(t5[t5["z"] > 4])
print(t5[t5["row_name"].str.len() > 4])
不同条件之间需要用括号括起来,同时用&,|诸如此类的符号连接。
对电影数据进行处理:
import pandas as pd
from matplotlib import pyplot as plt
file_path = "./IMDB-Movie-Data.csv"
df = pd.read_csv(file_path)
print(df.head(1))
print(df.info())
runtime_data = df["Runtime (Minutes)"].values
max_runtime = runtime_data.max()
min_runtime = runtime_data.min()
# 计算组数
num_bin = (max_runtime - min_runtime) // 5
# 设置图形的大小
plt.figure(figsize=(20, 8), dpi=80)
# 绘制
plt.hist(runtime_data, num_bin)
# 设置坐标轴的刻度
plt.xticks(range(min_runtime, max_runtime + 5, 5))
# 展示
plt.show()