1.Pandas数据结构和简介
Pandas主要有两种类型的数据结构,分别是Series和DataFrame。
data1.xlsx
名字 | 语文 | 数学 | 英语 |
jonny | 88 | 50 | 90 |
zihxiu | 20 | 88 | 80 |
xiaoming | 90 | 90 | 80 |
Series可以看做表中的某一列,这里的语文、数学、英语成绩对应的列都是一个Series。
DataFrame则是整个数据表格,由多个列构成。
后续几乎所有的操作,都是基于这些列和表进行的。下面我们分别来认识一下Pandas的两大支柱:Series和DataFrame。
1.1Series和DataFrame
数据表格的三要素:
- column对应着列名,指定操作哪列数据;
- index代表索引,告诉我们有多少行数据,索引默认从0开始;
- value则指代具体的数据值;
1.2 创建DataFrame和Series
Pandas操作第一步一定是先导入我们的库:import pandas as pd
创建DataFrame最常用的方式是字典+列表,语句很简单,先是字典外括,然后依次打出每一列的列名及其对应的列值(此处一定要用列表)
import pandas as pd
# 创建数据
data = { "星期": ["星期一", "星期二", "星期三"], "天气": ["晴", "阴", "雨"], "温度": [29, 27, 22] }
# 创建DataFrame
df = pd.DataFrame(data)
# 显示DataFrame
print(df)
2.数据读取和存储
2.1 Excel文件读取
2.1.1文件路径的切换
import os
os.chdir(r'文件路径')
os.chdir是实现系统文件路径切换的方法,在里面输入我们从系统复制的路径地址。
需要注意的是,路径前面加了一个r,是因为文件路径一般都包含斜杠,而斜杠在Python中会有其他含义(如转义)。在路径前加r相当于告诉Python里面的内容没有其他意思,保证路径被程序完整准确的理解。
2.1.2 pd.read_excel
data1 = pd.read_excel('data1.xlsx')
data1
上面只赋予Excel名称的读取方式,默认打开的是第一个sheet。当一个Excel文件包含多个sheet时,通过指定具体sheet_name的方式实现更精准读取:
data1 = pd.read_excel('data1.xlsx', sheet_name = 'Sheet1')
data1
2.1.3 header和names
当第一行并不是表头属性时,pandas默认第一行的数据会被识别为表头这个时候我们可以把headers参数设置成None,来告诉Pandas。
data = pd.read_excel('文件名', sheet_name = 'Sheet2', header = None)
如果headers = None,默认的column表头是从0到3的几个数字,很不美观。所以,我们可以在读取的时候通过names参数,把表头设置成我们预期的内容即可:
data = pd.read_excel('文件名', sheet_name = 'Sheet2',
header = None, names = ['姓名', '语文', '数学', '英语'])
headers除了设置成None,还可以设置成数字,代表在读取时把第几行数据作为表头。例如我们想要把Sheet1中的小明所在的第二行作为表头,把headers设置成1即可(日常计数是从1开始,但Python里面的计数是从0开始):
data = pd.read_excel('文件名', sheet_name = 'Sheet2', header =2)
2.1.4其他参数
- index_col指定索引列
- usecols指定读取部分列
- nrows指定读取部分行
- prefix给表头设置前缀
- dtype和字典结合,读取时为每一列数据设置格式
- ....
2.2 csv文件的读取
Pandas读取csv文件用的是pd.read_csv('具体文件名')
2.2.1 中文路径
data = pd.read_csv('data2.csv',engine = 'python')
2.2.2 编码设置
csv文件有不同的编码形式,utf8和gbk是两种最常见的编码
data_csv = pd.read_csv('data2.csv',engine = 'python', encoding = 'gbk')
2.2.3 分隔符的处理
Pandas的read_csv方法在读取csv文件时默认是以逗号作为分隔符来打开的(这也是绝大部分csv文件的分割方式),但如果当文件本身的分割使用的是其他分隔符,就需要在读取时设置好seq参数
data2 = pd.read_csv('data2.csv',seq = '\t')
2.3 其他文件类型的读取
2.3.1 txt文件的读取
data1 = pd.read_table('对应文件名',seq = '\t')
2.3.2 json文件的读取
字典形式的文件,在读取时用pd.read_json()方法。
2.4 存储数据
pd.to_xxx()方法
data.to_excel('data1.xlsx')
data.to_csv('data1.csv')
默认的存储方式会把索引也作为一列存储,如果我们不希望索引保存,设置index=False就可以:
data.to_excel('xxx.xlsx',index = False)
2.5 查看数据
1. Pandas中用df.head(n)函数直接可以查看默认的前n行。与之对应,df.tail(n)就可以查看数据尾部的n行数据,
2. 数据的行列数,每一列是否有空缺值存在,各列的数据格式分别是什么,这些信息对于分析师来说也至关重要。
用df.info()可以帮助我们一步摸清各列数据的类型,以及缺失情况
3. 了解数据类型和空缺值情况后,我们经常还会对数据某些列做统计层面的分析。df.describe()可以快速计算数值型数据的关键统计指标,像平均数、分位数、标准差等常见指标。
3.数据的基本处理方式——增、删、选、改
3.1 增
增加列用的是df['新列名'] = 新列值的方式,在原数据基础上赋值
df['新增的列'] = 'new'
df['新增'] = range(1,len(df) + 1)
3.2 删
drop函数制定删除对应的列,axis = 1表示针对列的操作,inplace为True,则直接在源数据上进行修改,否则源数据会保持原样。
df.drop('新增的列'axis = 1, inplace = True)
3.3 选
单列 ----df['列名']
df['英语']
多列 -----df[['第一列','第二列','第三列'..]]
df [['语文','数学','英语']]
3.4 改
df['旧列名'] = 某个值或者某列值(列值的数量必须和原数据行数相等
4. 常用数据类型及操作
4.1 字符串
df.info()查看数据类型时,非数值型的列都显示的是object格式
df['temp'].str.replace('-',' ')
#负号替换为空格
df['temp'] = df['temp'].str.replace('-',' ')
#用清洗之后的列替换掉原来列
4.2 数值型
Pandas把带“%”符号的转化率识别成字符串类型,我们需要先拿掉百分号,再将这一列转化为浮点型数据
把9.98%变成了9.98,所以我们还需要让支付转化率除以100,来还原百分数的真实数值
4.3 时间类型
在Excel中常用的时间格式是'2022-12-24'或者'2022/12/24'
一些时候Pandas会把文件中日期格式的字段读取为字符串格式,这里我们先把字符串'2022-12-24'赋值给新增的日期列,然后用to_datetime()函数将字符串类型转换成时间格式
转换成时间格式(这里是datetime64)之后,我们可以用处理时间的思路高效处理这些数据,比如,我现在想知道提取数据这一天离年末还有多少天('2022-12-31'),直接做减法(该函数接受时间格式的字符串序列,也接受单个字符串)