numpy能够帮我们处理处理数值型数据,但是这还不够, 很多时候,我们的数据除了数值之外,还有字符串,还有时间序列等
Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建,提供了高级数据结构和数据操作工具,它是使Python成为强大而高效的数据分析环境的重要因素之一。
-
一个强大的分析和操作大型结构化数据集所需的工具集
-
基础是NumPy,提供了高性能矩阵的运算
-
提供了大量能够快速便捷地处理数据的函数和方法
-
应用于数据挖掘,数据分析
-
提供数据清洗功能
类似于一维数组,有一组数据和一组索引组成。
1. 基本使用import numpy as np
from pandas import Series
print(Series(range(3)))
print("#" * 30)
print(Series(range(3), index = ["first", "second", "third"]))
print("#" * 30)
print(Series(range(3), index = ["first", "second", "third"], dtype=int))
print("#" * 30)
print(Series(np.array(range(3)), index = ["first", "second", "third"], dtype=int))
print("#" * 30)
print(Series({"first": 1, "second": 2, "third": 3}, dtype=int))
0 0
1 1
2 2
dtype: int64
##############################
first 0
second 1
third 2
dtype: int64
##############################
first 0
second 1
third 2
dtype: int32
##############################
first 0
second 1
third 2
dtype: int32
##############################
first 1
second 2
third 3
dtype: int32
2.属性
Series对象的属性有:dtype, index, values, name
Series.index有属性:name
series0 = Series(np.array(range(3)), index = ["first", "second", "third"], dtype=int)
series0.index = ["语文", "数学", "英语"]
print(series0.dtype)
print("##############################")
print(series0.index)
print("##############################")
print(series0.values)
series0.name = "Series0"
series0.index.name = "idx"
print("##############################")
print(series0)
int32
##############################
Index(['语文', '数学', '英语'], dtype='object')
##############################
[0 1 2]
##############################
idx
语文 0
数学 1
英语 2
Name: Series0, dtype: int32
3.Pandas的索引操作
1. Series和DataFrame中的索引都是Index对象
print(type(ser_obj.index)) print(type(df_obj2.index)) print(df_obj2.index)2.索引对象不可变,保证数据安全 3.常用索引对象Int64Index([0, 1, 2, 3], dtype='int64')
- Index,索引
- Int64Index,整数索引
- MultiIndex,层级索引
- DatetimeIndex,时间戳类型
ser_obj = pd.Series(range(5), index = ['a', 'b', 'c', 'd', 'e']) print(ser_obj.head()) a 0 b 1 c 2 d 3 e 4 dtype: int644.2 行索引
# 行索引 print(ser_obj['b']) print(ser_obj[2]) 1 2
####4.3 切片索引
ser_obj[2:4], ser_obj[‘label1’: ’label3’]
# 切片索引 print(ser_obj[1:3]) print(ser_obj['b':'d']) b 1 c 2 dtype: int64 b 1 c 2 d 3 dtype: int644.4 不连续索引
# 不连续索引 print(ser_obj[[0, 2, 4]]) print(ser_obj[['a', 'e']]) a 0 c 2 e 4 dtype: int64 a 0 e 4 dtype: int644.5 布尔索引
# 布尔索引 ser_bool = ser_obj > 2 print(ser_bool) print(ser_obj[ser_bool]) print(ser_obj[ser_obj > 2]) a False b False c False d True e True dtype: bool d 3 e 4 dtype: int64 d 3 e 4 dtype: int645 DataFrame索引 5.1 columns指定列索引名
df_obj = pd.DataFrame(np.random.randn(5,4), columns = ['a', 'b', 'c', 'd'])
print(df_obj.head())
a b c d
0 -0.241678 0.621589 0.843546 -0.383105
1 -0.526918 -0.485325 1.124420 -0.653144
2 -1.074163 0.939324 -0.309822 -0.209149
3 -0.716816 1.844654 -2.123637 -1.323484
4 0.368212 -0.910324 0.064703 0.486016
5.2 使用索引
print(df_obj['a']) # 返回Series类型 0 -0.241678 1 -0.526918 2 -1.074163 3 -0.716816 4 0.368212 Name: a, dtype: float644. Pandas函数应用 1.可直接使用NumPy的函数
# Numpy ufunc 函数
df = pd.DataFrame(np.random.randn(5,4) - 1)
print(df)
print(np.abs(df))
0 1 2 3
0 -0.062413 0.844813 -1.853721 -1.980717
1 -0.539628 -1.975173 -0.856597 -2.612406
2 -1.277081 -1.088457 -0.152189 0.530325
3 -1.356578 -1.996441 0.368822 -2.211478
4 -0.562777 0.518648 -2.007223 0.059411
0 1 2 3
0 0.062413 0.844813 1.853721 1.980717
1 0.539628 1.975173 0.856597 2.612406
2 1.277081 1.088457 0.152189 0.530325
3 1.356578 1.996441 0.368822 2.211478
4 0.562777 0.518648 2.007223 0.059411
2.通过apply将函数应用到列或行上
# 使用apply应用行或列数据 f = lambda x : x.max() print(df.apply(lambda x : x.max())) 0 -0.062413 1 0.844813 2 0.368822 3 0.530325 dtype: float64
注意:函数应用默认按照列方向,可以通过print(df.apply(lambda x : x.max(), axis=1))指定按照行方向
3.通过applymap将函数应用到每个数据上# 使用applymap应用到每个数据
f2 = lambda x : '%.2f' % x
print(df.applymap(f2))
0 1 2 3
0 -0.06 0.84 -1.85 -1.98
1 -0.54 -1.98 -0.86 -2.61
2 -1.28 -1.09 -0.15 0.53
3 -1.36 -2.00 0.37 -2.21
4 -0.56 0.52 -2.01 0.06
5.数据读取与存储
1.CSV文件
读取csv文件read_csv(file_path or buf,usecols,encoding):file_path:文件路径,usecols:指定读取的列名,encoding:编码
data = pd.read_csv('d:/test_data/food_rank.csv',encoding='utf8')
data.head()
name num
0 酥油茶 219.0
1 青稞酒 95.0
2 酸奶 62.0
3 糌粑 16.0
4 琵琶肉 2.0
#指定读取的列名
data = pd.read_csv('d:/test_data/food_rank.csv',usecols=['name'])
data.head()
name
0 酥油茶
1 青稞酒
2 酸奶
3 糌粑
4 琵琶肉
#如果文件路径有中文,则需要知道参数engine='python'
data = pd.read_csv('d:/数据/food_rank.csv',engine='python',encoding='utf8')
data.head()
name num
0 酥油茶 219.0
1 青稞酒 95.0
2 酸奶 62.0
3 糌粑 16.0
4 琵琶肉 2.0
#建议文件路径和文件名,不要出现中文
2.写入文件
**DataFrame**:to_csv(file_path or buf,sep,columns,header,index,na_rep,mode):file_path:保存文件路径,默认None,sep:分隔符,默认’,’ ,columns:是否保留某列数据,默认None,header:是否保留列名,默认True,index:是否保留行索引,默认True,na_rep:指定字符串来代替空值,默认是空字符,mode:默认’w’,追加’a’
**Series**:`Series.to_csv` (_path=None_,_index=True_,_sep='_,_'_,_na_rep=''_,_header=False_,_mode='w'_,_encoding=None_)



