目的是为了记录所使用的方法,帮助我复习
要学好还是要看官方文档
传送门
目录
一、常用数据类型
二、常用的方法
三、索引和复合索引
8. 简单的索引操作
2. 复合索引
四、时间序列
五、读取文件
Series为一维,,基于Numpy的ndarray 结构
数据类型具体为pandas.core.series.Series
pd.Series(data=None, index=None, dtype=None, name=None, copy=False) 方法。其中常用的
data 为所传入数据,此数据可以为numpy中的数组,也可以为python中的列表和字典
index 为索引,可以传入字符串列表
dtype 为data的类型,可以通过传入新的值修改
# 插入numpy数组
t = pd.Series(np.arange(10))
# 插入列表
t = pd.Series([10, 20, 30, 40, 50])
# 插入字典序
d = {'a':10,'b':20,'c':30,'d':40,'e':50}
t = pd.Series(d)
# 示例:
t = pd.Series(np.arange(10), index=list(string.ascii_uppercase[:10]))
类似于字典
series的索引与切片与numpy的操作类似,唯一的区别就是在对索引的调用
在我自己的运行中发现传入没有事先定义的索引会标错,也就是最后传入的“g”并不会给定结果nan
DataFrame为二维,是Series容器。
DataFrame对象既有行索引,又有列索引:
pd.DataFrame([data, index, columns, dtype, copy])
# 两层字典嵌套
d = {'a': {'tp': 2, 'fp': 11},
'b': {'tp': 6, 'fp': 91},
'c': {'tp': 3, 'fp': 4}}
df = pd.DataFrame(d)
# 函数标准创建
df = pd.DataFrame(np.arange(6).reshape(2, 3), index=list("ab"), columns=list("efg"))
# 基础属性
df.shape # 行数 列数
df.dtypes # 列数据类型
df.ndim # 数据维度
df.index # 行索引
df.columu # 列索引
df.values # 对象值,二维ndarray数组
# 整体情况查询
df.head(5) # 显示开头几行,默认5行
df.tail(3) # 显示末尾几行,默认5行
df.info() # 相关信息概览:行数、列数、列索引、列非空值个数等等
df.describe() # 快速综合统计结果:计数、均值、标准差、最大值、四分位数、最小值
# 列索引内只能放一个,多了会报错
df[:100][" Count_AnimalName "]
df = pd.DataFrame({'a': range(7),
'b': range(7, 0, -1),
'c': ['one', 'one', 'one', 'two', 'two', 'two', 'two'],
'd': [0, 1, 2, 0, -1, -2, -3]})
print(df)
print("*"*20)
print(df[df["d"] > 0])
print(df["d"] > 0)
# 输出结果
# a b c d
# 0 0 7 one 0
# 1 1 6 one 1
# 2 2 5 one 2
# 3 3 4 two 0
# 4 4 3 two -1
# 5 5 2 two -2
# 6 6 1 two -3
# ********************
# a b c d
# 1 1 6 one 1
# 2 2 5 one 2
0 False
1 True
2 True
3 False
4 False
5 False
6 False
Name: d, dtype: bool
Series.sort_values(ascending=True)
常用的是ascending,选择排序方式
# 排序方法
t = pd.Series({'ac':10,'b':20,'c':3,'d':12,'e':50})
print(t.sort_values(ascending=True))
# # c 3
# # ac 10
# # d 12
# # b 20
# # e 50
# # dtype: int64
# 计算、描述性统计
t = pd.Series({'ac':10,'b':20,'c':10,'d':12,'e':50})
print(t.value_counts())
# 结果是 值-数量
# 10 2
# 12 1
# 20 1
# 50 1
# dtype: int64
df["d"].mean() # 平均值
df["d"].max() # 最大值
df["d"].min() # 最小值
df["d"].argmax() # 最大值行索引
df["d"].argmin() # 最小值行索引
df["d"].median() # 中值
df1 = pd.DataFrame({'a': range(3), 'b': range(3, 0, -1)}, index=list("abc"))
df2 = pd.DataFrame({'c': range(4, 0, -1), 'd': range(4)}, index=list("efgh"))
df = df2.join(df1, how='outer', sort=True)
# c d a b
# a NaN NaN 0.0 3.0
# b NaN NaN 1.0 2.0
# c NaN NaN 2.0 1.0
# e 4.0 0.0 NaN NaN
# f 3.0 1.0 NaN NaN
# g 2.0 2.0 NaN NaN
# h 1.0 3.0 NaN NaN
具体的合并方式由how控制,
合并原理参考笛卡尔积
df1 = pd.DataFrame({'a': range(3), 'b': range(3, 0, -1)})
df2 = pd.DataFrame({'a': range(4, 0, -1), 'd': range(4)})
df = pd.merge(df1, df2, left_on="a", right_on="a", how="outer")
# a b d
# 0 0 3.0 NaN
# 1 1 2.0 3.0
# 2 2 1.0 2.0
# 3 4 NaN 0.0
# 4 3 NaN 1.0
DataFrame.groupby(self, by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False)
df = pd.DataFrame([
{'date': '2018-12-01', 'total': 105, 'total2': 133.03},
{'date': '2018-12-01', 'total': 105, 'total2': 2032.13},
{'date': '2018-12-01', 'total': 109, 'total2': 1312.32},
{'date': '2018-12-01', 'total': 109, 'total2': 33120.23},
{'date': '2018-12-02', 'total': 103, 'total2': 13123.23},
{'date': '2018-12-02', 'total': 103, 'total2': 231232.13},
])
grouped = df.groupby(by=['date'])
print(grouped.mean())
空数值也就是nan,性质与numpy的nan一样
print(df.index)
df.index = [list("abcedfg")]
# 需要接收不能直接在原来的基础上修改
print(df.reindex([list("gfdecba")]))
1. 设置复合索引
# 把列索引"a"作为行索引,drop为是否保留原来的"a"列
print(df.set_index(["a", "d"], drop=True))
# 不唯一时则返回列表
print(df.set_index(["a", "d"]).index.unique())
# 输出结果索引有顺序区别
print(df.set_index(["a", "c"], drop=True))
print(df.set_index(["c", "a"], drop=True))
2. 读取复合索引
数据类型是DatetimeIndex,即:
pandas.core.indexes.datetimes.DatetimeIndex
重采样:指的是将时间序列从一个频率转化为另一个频率进行处理的过程,将高频率数据转化为低频率数据为降采样,低频率转化为高频率为升采样
resample方法
有点像group分组
dft = pd.date_range(start="20200101", end="20200201", freq='D')
df = pd.DataFrame(range(32), index=dft)
print(df.resample("10D").mean())
# 0
# 2020-01-01 4.5
# 2020-01-11 14.5
# 2020-01-21 24.5
# 2020-01-31 30.5
时间段
将Periodindex中的时间数据提取出来,并转化成时间数值列表数据
在pb.read_ 后面有很多文件类型,读取文件时选择对应的文件类型就好了
举例读取csv中的文件
file_path = "I:/trySomething/python/pandas/fifa/players_15.csv"
df = pd.read_csv(file_path)