《Python数据分析入门学习》- 2、简单数据预处理
目录
本文是《Python数据分析入门学习》系列的第2篇文章,分别有以下几个部分组成:学习的目标和内容、所需的设备及程序运行环境的搭建、实操代码及运行结果。
1 学习目标
本次需要学习的目标主要有以下几点:
(1) Python中变量的命名;
(2) Python中的数据类型——布尔型、数值型、字符型;
(3) Python中的数据结构——Pandas中的系列、数据框;
(4) Python中的数据的导入及导出-CSV\TXT\EXCEL;
2 学习内容
(1) Python中3种数据类型的概念及使用,包括布尔型、数值型、字符型;
(2) Python中基于Pandas的2种数据结构,系列Series和数据框DateFrame;
(3) Pandas模块中的函数对CSV、Excel、TXT格式数据文件进行导入和导出;
3 代码应用
3.1 数据类型
3.1.1 测试代码
# -*- coding: utf-8 -*-
"""==============================
#@Project : demo2
#@File : data_type1
#@Software: PyCharm
#@Author : Echo
#@Email : robot1483693261@163.com
#@Date : 2022/5/6 15:20
#@Desc :
=============================="""
# 1、逻辑类型布尔
x = 1
y = 2
print(x > y)
t = True
f = False
print(True & True) # 与
print(True & False)
print(False & False)
print(True | True) # 或
print(True | False)
print(False | False)
print(not True) # 非
print(not False)
# 2、数值型
x = 1
y = 2
print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(7 // 4) # 取整
print(10 % 4) # 求余
print(2 ** 3) # 乘方
# 浮点数运算需要注意的地方
a = 4.2
b = 2.1
print(a + b)
(a + b) == 6.3
# 解决方式1
print(a + b)
# 解决方式2
from decimal import Decimal
a = Decimal('4.2')
b = Decimal('2.1')
a + b
print(a + b)
# 3、字符型
x = '我是一个字符串' # 字符串str用单引号(' ')或双引号(" ")或三引号(""" """)括起来
y = "我也是一个字符串"
z = """我还是一个字符串"""
print(x)
print(y)
print(z)
s = 'Yes,he doesn\'t' # 使用反斜杠(\)转义特殊字符。
print(s)
print('C:\some\name') # \n 表示回车
print('C:\\some\\name') # 加反斜杠(\)转义回车符
print(r'C:\some\name') # 开头加一个r,表示原始字符
s = "abcd\
efg"
print(s) # 反斜杠可以作为续行符,表示下一行是上一行的延续
s = """
Hello I am 2贰进制!
Thinks.
"""
print(s)
print('str' + 'ing', '2贰进制' * 3)
word = 'Python'
print(word[0], word[5])
print(word[-1], word[-6])
word = 'ilovepython'
print(word[1:5])
print(word[:])
print(word[5:])
'''Python字符串不能被改变'''
#向一个索引位置赋值,比如 word[0] = 'm'会导致错误。
word[0] = 'm'
3.1.2 测试结果
False
True
False
False
True
True
False
False
True
3
-1
2
0.5
1
2
8
6.300000000000001
6.300000000000001
6.3
我是一个字符串
我也是一个字符串
我还是一个字符串
Yes,he doesn't
C:\some
ame
C:\some\name
C:\some\name
abcdefg
Hello I am 2贰进制!
Thinks.
string 2贰进制2贰进制2贰进制
P n
n P
love
ilovepython
python
Process finished with exit code 0
3.2 数据结构
3.2.1 测试代码
# -*- coding: utf-8 -*-
"""==============================
#@Project : demo2
#@File : data_structure2
#@Software: PyCharm
#@Author : Echo
#@Email : robot1483693261@163.com
#@Date : 2022/5/6 16:09
#@Desc :
=============================="""
# 1、数据结构Series
from pandas import Series # 从pandas包中导入series对象
# 1.1定义序列
x = Series(['a', True, 1]) # 默认索引:0,1,2
x = Series(['a', True, 1], index=['first', 'second', 'third']) # 自定义索引
# 1.2访问数据
x[1] # 根据默认索引访问
x['second'] # 根据自定义索引访问
# x[3] #不能越界访问
# 1.3往序列中增加数据
# x.append('2') #采用append方法时,不能追加单个元素
n = Series(['2'], index=['forth']) # 但可以追加一个系列
x.append(n)
x = x.append(n) # append方法并不直接修改对象,需要对对象重新赋值
# 1.4获取数据
# 判断值是否存在
'2' in x.values
x[1:3] # 保留x[1]和x[2]
x[[0, 2, 1]] # 定位获取
x.values # 获取序列中的所有值
# 1.5删除数据
x.drop('first') # 根据索引删除
# 与append一样,drop操作后不会对x有影响,若想修改x,需要采用x=x.drop
x.drop(x.index[3]) # 根据位置删除
# x.index[3] = 'forth' # 索引序列中的第4项
x['2' != x.values] # 根据值删除
# 2数据结构DataFrame
from pandas import DataFrame # 导入pandas包中的数据框类
# 2.1定义一个数据框
df = DataFrame({'age': [21, 22, 23], 'name': ['mary', 'lily', 'lucy']})
df = DataFrame(
data={'age': [21, 22, 23],
'name': ['mary', 'lily', 'lucy']},
index=['first', 'second', 'third'])
df['age'] # 按列访问 #3.访问数据框中的元素
df[['age', 'name']] # 访问多列
df[1:2] # 按行访问,注意左闭右开,取第二行数据
df.loc[['first', 'second']] # 按行索引访问
df.iloc[0:1, 0:1] # 按行列号访问,第0行第0个元素,21
df.iloc[1:2, 0:1] # 第1行第0个元素,22
df.iloc[2:3, 0:1] # 第2行第0个元素,23
df.iloc[0:1, 1:2] # 第0行第1个元素,mary
df.iloc[1:2, 1:2] # 第1行第1个元素,lily
df.iloc[2:3, 1:2] # 第2行第1个元素,lucy
df.at['first', 'name'] # 按行索引、列名访问
df.at['first', 'age']
print(df)
# 2.2修改数据框
df.columns
df.columns = ['age2', 'name2'] # 修改列名
df.index # 修改行索引
df.index = range(1, 4) # 包括1,2,3,不包括4
df.index
print(df)
# 2.3删除数据框数据
df = DataFrame(
data={
'age': [21, 22, 23],
'name': ['mary', 'lily', 'lucy']},
index=['first', 'second', 'third'])
df.drop('first', axis=0) # 根据行索引删除,axis=0代表行
df.drop('age', axis=1) # 根据列名删除,axis=1代表行
df.drop('name', axis=1)
del df['age'] # 第二种删除列的方法,直接对原数据进行删除
print(df)
# 2.4增加数据框数据
df = DataFrame(
data={
'age': [21, 22, 23],
'name': ['mary', 'lily', 'lucy']},
index=['first', 'second', 'third'])
df.loc[len(df)] = [24, 'jenny'] # 增加行,直接修改原数据
df['new'] = [2, 4, 6, 8] # 增加列,直接修改原数据
print(df)
3.2.2 测试结果
age name
first 21 mary
second 22 lily
third 23 lucy
age2 name2
1 21 mary
2 22 lily
3 23 lucy
name
first mary
second lily
third lucy
age name new
first 21 mary 2
second 22 lily 4
third 23 lucy 6
3 24 jenny 8
Process finished with exit code 0
3.3 数据导入
3.3.1 测试代码
# -*- coding: utf-8 -*-
"""==============================
#@Project : demo2
#@File : data_import3
#@Software: PyCharm
#@Author : Echo
#@Email : robot1483693261@163.com
#@Date : 2022/5/6 18:33
#@Desc :
=============================="""
# 4.1.1 CSV文件
from pandas import read_csv
from pandas import DataFrame
df = DataFrame({'age': [2, 4, 3, 5], 'name': ['2', '贰', '进', '制']})
print(df)
'''#若文件编码包含中文,则需要设置encoding='UTF-8'
df1 = read_csv(
'F:/study/Python/DataMining/DataImport/4.1/1.csv',
encoding='UTF-8'
)
'''
# 4.1.2 txt文件
from pandas import read_table
'''#错误导入
#df = read_table('F:/2贰进制/Python/DataImport/4.1/2.txt')
#df
#问题:默认将第一行数据作为列名,结果将数据作为了列名
#原因:在导入的时候只确定了文件的路径,缺乏列名
#修正:在导入的时候确定文件的路径、列名以及分隔符'''
df1 = read_table('2.txt', # 文件路径
names=['age', 'name'], # 列名
sep=',') # 列与列之间的分隔符
print(df1)
# 4.1.3 excel文件
from pandas import read_excel
df = read_excel(
'3.xlsx',
sheetname='data')
print(df)
3.3.2 测试结果
读取Excel需要安装引擎,否则会报错,常见的引擎有:xlrd和openpyxl,本文以openpyxl为例
安装命令如下:
$ pip install openpyxl
安装成功提示如下:
Successfully installed et-xmlfile-1.1.0 openpyxl-3.0.10
age name
0 2 2
1 4 贰
2 3 进
3 5 制
age name
0 23 2贰
1 32 进
2 25 制
3 2贰进制 2erjinzhi
age name
0 23 KEN
1 32 John
2 25 JIMI
Process finished with exit code 0
3.4 数据导出
3.4.1 测试代码
# -*- coding: utf-8 -*-
"""==============================
#@Project : demo2
#@File : data_output4
#@Software: PyCharm
#@Author : Echo
#@Email : robot1483693261@163.com
#@Date : 2022/5/6 20:50
#@Desc :
=============================="""
# CSV文件导出
from pandas import DataFrame
df = DataFrame({'age': [2, 4, 3, 5], 'name': ['2', '贰', '进', '制']})
# 按照默认格式进行导出,即保留行序号和列名
df.to_csv("d1.csv")
# 若导出时不保留行序号
df.to_csv("d2.csv",index=False)
3.4.2 测试结果
下篇预告
《Python数据分析入门学习》系列的第3篇,即下一篇文章的主要内容是进阶数据预处理。敬请期待~~
其他内容
公众号文章:
https://mp.weixin.qq.com/s/ynG-dNNqO8kjIdf6ZFiZbg
优快云主页地址:
https://blog.youkuaiyun.com/meenr