数据治理 | 数据分析与清洗工具:Pandas 数据类型转换(赠送本文同款数据!!)
我们将在数据治理板块中推出一系列原创推文,帮助读者搭建一个完整的社科研究数据治理软硬件体系(详情见文末)。
目录:
一、前言
二、为什么需要做数据类型转换
三、类型转换
使用 astype() 转换基本类型
场景 1:将数据中的年份字段转换为整数型。 场景 2:将数据中所有内容转换为字符型数据。转换后的数据命名为 ALL_STR
使用 eval() 转换特殊类型
场景 3:将数据中“列表”字段转换为 Python 列表类型 四、总结
💡 本文所用数据为:【5G 产业全国各省市分年度专利申请、专利授权情况(2000-2019.9)】
💡 数据获取方式:关注本公众号,后台回复关键词“20220402”即可获取
Part1前言
Part2为什么需要做数据类型转换
错误示范 | 正确示范 | 原因解析 |
今年是 2022.0 年 | 今年是 2022 年 | 2022 作为一个年份时,应该保存为整数型或者字符型,而不是浮点型(小数型)数字 2022.0 |
圆周率保留两位小数的结果是 3 | 圆周率保留两位小数的结果是 3.14 | 圆周率保留两位小数应该是浮点数 3.14,如果转为整数型,其结果就会是 3 |
1 + 1 = 11 | 1 + 1 = 2 |
|
[0, 1, 2] 的第一个元素是 [ | [0, 1, 2] 的第一个元素是 0 | 列表 |
Part3类型转换
# 数据存储的路径
path = './5G 产业全国各省市分年度专利申请、专利授权情况(2000-2019.9).xlsx'
# 这里指定字段的数据类型
columns_type = {'年份':'str',
'省份名':'str',
'省份行政代码':'int',
'专利申请':'int',
'专利授权':'int',
'专利类型':'str'}
# dtype 参数用于指定字段的类型,如果不需要特意指定字段的类型,不使用 dtype 参数即可
data = pd.read_excel(path, dtype=columns_type)
data
专利申请
、专利授权
和专利类型
的列表。操作代码和新生成的数据如下:# 根据专利申请、专利授权和专利类型三个字段得到一个新字段
data['列表'] = data.apply(lambda X: [X['专利申请'], X['专利授权'], X['专利类型']] ,axis=1)
data
# 将刚刚新生成的数据保存为 csv 文件
# 参数 index=False 的含义是,不讲数据索引写入 csv 文件中
data.to_csv('新数据.csv', index=False)
# 使用错误的字段类型重新读取数据
# 我们将年份读取为浮点型(小数型),将专利申请读取为字符型
wrong_type = {'年份':'float',
'专利申请':'str'}
DATA = pd.read_csv('新数据.csv', dtype=wrong_type)
# 查看专利申请字段类型
print(DATA.专利申请.dtype) # 输出:object,说明该字段含有字符型数据
DATA
专利授权
/ 专利申请
来计算专利授权率
时 ,会发现整数和字符之间无法运算。如果这两个字段中的值的都是字符型,那么两者只能进行加法运算,例如:“45” + “8” == “458”
,这恐怕更不是我们想要的结果。1使用 astype() 转换基本类型
astype()
方法,这个方法可以将数据类型转换为希望的类型,既可以操作 Series,又可以操作 DataFrame,使用时只需要传入转换后的类型即可。我们在往期的文章中提到过,Pandas 中绝大多数涉及到数据修改的方法,他们都不会直接修改原始的数据,而是返回一个新的数据。astype()
也是一样的,默认返回一个新的数据。场景 1:将数据中的年份字段转换为整数型
# 将字段类型由浮点型(小数型)转换为整数型 int
# 返回一个新数据,调用该方法的是一个 Series,返回值也将是一个 Series
DATA['年份'].astype(int)
# 将新生的数据重新赋值给原始数据即可
# 赋值操作不会返回任何值
DATA['年份'] = DATA['年份'].astype(int)
# 输出查看转换后的数据
DATA
场景 2:将数据中所有内容转换为字符型数据,转换后的数据命名为 ALL_STR
# 将类型转换为字符型数据后的新数据命名为 ALL_STR
ALL_STR = DATA.astype(str)
# 查看新数据的信息
ALL_STR.info()
object
,说明所有字段中都含有字符型数据,操作生效。errors='ignore'
来忽略无法转换的数据值。假如我们希望将所有字段都转换为浮点型(小数型),但是字符型数据 “北京” 、“45”、“发明专利” 等字符型数据无法转换为浮点型,我们则可以使用下面的代码来转换可以转换的字段:# 指定参数 errors='ignore',忽略无法转换的数据值
DATA.astype(float, errors='ignore')
2使用 eval() 转换特殊类型
astype()
方法多用于浮点型 float
、整数型 int
和 字符型 str
的转换操作。当涉及到字符型转化为列表,字典等 Python 的组合数据类型时,则需要使用 Python 自带的方法 eval()
。该函数可以去掉字符串最外侧的引号,并按照 Python 语句方式执行去掉引号后的字符内容。下面我们举例介绍一下 eval()
的用法。# 对字符串 '12' 做转换
eval('12') # 得到整数:12
# 对字符串 '12.5' 做转换
eval('12.5') # 得到浮点数:12.5
# 对字符串 '12+5' 做转换
eval('12+5') # 得到整数:17
# 定义变量 a 后对字符串 'a' 做转换
a = '20'
eval('a') # 得到 a 的值:20
# 对字符串 "[11,12,'列表元素']" 做转换
eval("[11,12,'列表元素']") # 得到列表:[11, 12, '列表元素']
# 定义变量 m,n 后对字符串 '[m,n,m-50]' 做转换
m=100
n='某个字符串'
eval("[m,n,m-50]") # 得到列表:[100, '某个字符串', 50]
eval()
确实可以去掉字符串最外侧的引号,并按照 Python 语句方式执行去掉引号后的字符内容。这个方法不仅可以转换列表形式的字符串,对诸如字典、元组以及集合等 Python 数据类型形式的字符串,该方法依然可用。场景 3:将数据中“列表”字段转换为 Python 列表类型
eval()
方法操作的是字符串对象,一次只接受一个需要转化的对象,当需要使用它来对 DataFrame 的一整个字段做转换操作时,需要借助循环或者其他的 Pandas 方法。# 输出查看转换之前"列表"字段最后一个值的类型,原始的类型为 str 型
print(type(DATA['列表'].values[-1]))
# 输出:<class 'str'>,确认是字符型
# 方法 1:借助 for 循环
for i in DATA.index:
# 遍历数据的索引
# 根据索引找到待转换的数据
Target = DATA.loc[i,'列表']
# 将转换后的数据重新赋值给原来位置的数据值
DATA['列表'][i] = eval(Target)
# 输出查看"列表"字段最后一个值的类型,若为列表,说明转换成功
print(type(DATA['列表'].values[-1]))
# 输出:<class 'list'>,转换成功
# 方法 2:借助 Pandas 方法 map()。不再输出查看类型
DATA['列表'] = DATA['列表'].map(eval)
# 方法 3:借助 Pandas 方法 apply()。不再输出查看类型
DATA['列表'] = DATA['列表'].apply(eval)
方法 1
同样的效果,且代码量更少。Part4总结
场景3
中,我们使用了map()
和 apply()
两个方法,使用更少的代码完成了同样的功能。下期文章我们将会继续介绍 Pandas,学习如何使用以上两种方法来根据已有的数据生成新的数据列(数据列衍生)。我们将在数据治理板块中推出一系列原创推文,帮助读者搭建一个完整的社科研究数据治理软硬件体系。该板块将涉及以下几个模块:
1. 计算机基础知识
2. 编程基础
(1) 数据治理 | 带你学Python之 环境搭建与基础数据类型介绍篇
(4) 数据治理 | 还在用Excel做数据分析呢?SQL它不香吗
(5) 数据治理 | 普通社科人如何学习SQL?一篇文章给您说明白
3. 数据采集
4. 数据存储
(1) 安装篇:数据治理 | 遇到海量数据stata卡死怎么办?这一数据处理利器要掌握
(2) 管理篇: 数据治理 | 多人协同处理数据担心不安全?学会这一招,轻松管理你的数据团队
(3) 数据导入:数据治理 | “把大象装进冰箱的第二步”:海量微观数据如何“塞进”数据库?
5. 数据清洗
(3) 数据治理 | 数据分析与清洗工具:Pandas数据选取与修改
(4) 数据治理 | 数据分析与清洗工具:用Pandas快速选出你的“心之所向”
(5) 数据治理 | 数据分析与清洗工具:Pandas缺失值与重复值处理
(6) 本期内容:数据治理 | 数据分析与清洗工具:Pandas 数据类型转换
6. 数据实验室搭建
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
文 | 《社科领域大数据治理实务手册》
欢迎扫描👇二维码添加关注