在 Pandas 中更改列的数据类型
import pandas as pd
import numpy as np
a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a)
df.dtypes
0 object
1 object
2 object
dtype: object
数据框(data.frame)是最常用的数据结构,用于存储二维表(即关系表)的数据,每一列存储的数据类型必须相同,不同数据列的数据类型可以相同,也可以不同,但是每列的行数(长度)必须相同。数据框的每列都有唯一的名字,在已创建的数据框上,用户可以添加计算列。
1 创建 DataFrame 时指定类型
如果要创建一个 DataFrame,可以直接通过 dtype 参数指定类型:
df = pd.DataFrame(data=np.arange(100).reshape((10,10)), dtype=np.int8)
df.dtypes
0 int8
1 int8
2 int8
3 int8
4 int8
5 int8
6 int8
7 int8
8 int8
9 int8
dtype: object
2 对于 Series
s = pd.Series(['1', '2', '4.7', 'pandas', '10'])
s
0 1
1 2
2 4.7
3 pandas
4 10
dtype: object
使用 to_numeric 转为数值
默认情况下,它不能处理字母型的字符串'pandas'
pd.to_numeric(s) # or pd.to_numeric(s, errors='raise');
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
pandas/_libs/src/inference.pyx in pandas._libs.lib.maybe_convert_numeric()
ValueError: Unable to parse string "pandas"
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-24-12f1203e2645> in <module>()
----> 1 pd.to_numeric(s) # or pd.to_numeric(s, errors='raise');
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pandas\core\tools\numeric.py in to_numeric(arg, errors, downcast)
131 coerce_numeric = False if errors in ('ignore', 'raise') else True
132 values = lib.maybe_convert_numeric(values, set(),
--> 133 coerce_numeric=coerce_numeric)
134
135 except Exception:
pandas/_libs/src/inference.pyx in pandas._libs.lib.maybe_convert_numeric()
ValueError: Unable to parse string "pandas" at position 3
可以将无效值强制转换为NaN,如下所示:
pd.to_numeric(s, errors='coerce')
0 1.0
1 2.0
2 4.7
3 NaN
4 10.0
dtype: float64
如果遇到无效值,第三个选项就是忽略该操作:
pd.to_numeric(s, errors='ignore')
0 1
1 2
2 4.7
3 pandas
4 10
dtype: object
3 对于多列或者整个 DataFrame
如果想要将这个操作应用到多个列,依次处理每一列是非常繁琐的,所以可以使用 DataFrame.apply 处理每一列。
a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['col1','col2','col3'])
df
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| col1 | col2 | col3 | |
|---|---|---|---|
| 0 | a | 1.2 | 4.2 |
| 1 | b | 70 | 0.03 |
| 2 | x | 5 | 0 |
df[['col2','col3']] = df[['col2','col3']].apply(pd.to_numeric)
df.dtypes
col1 object
col2 float64
col3 float64
dtype: object
这里「col2」和 「col3」根据需要具有 float64 类型
df.apply(pd.to_numeric, errors='ignore')
该函数将被应用于整个DataFrame,可以转换为数字类型的列将被转换,而不能(例如,它们包含非数字字符串或日期)的列将被单独保留。
另外 pd.to_datetime 和 pd.to_timedelta 可将数据转换为日期和时间戳。
软转换——类型自动推断
infer_objects() 方法,用于将具有对象数据类型的 DataFrame 的列转换为更具体的类型。
df = pd.DataFrame({'a': [7, 1, 5], 'b': ['3','2','1']}, dtype='object')
df.dtypes
a object
b object
dtype: object
然后使用 infer_objects(),可以将列 'a' 的类型更改为 int64:
df = df.infer_objects()
df.dtypes
a int64
b object
dtype: object
astype 强制转换
如果试图强制将两列转换为整数类型,可以使用 df.astype(int)。
a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
df.dtypes
one object
two object
three object
dtype: object
df[['two', 'three']] = df[['two', 'three']].astype(float)
df.dtypes
one object
two float64
three float64
dtype: object
在 Pandas 中更改列的数据类型的更多相关文章
- 在Pandas中更改列的数据类型【方法总结】
先看一个非常简单的例子: a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']] df = pd.DataFrame(a) 有什 ...
- 备忘:MySQL中修改表中某列的数据类型、删除外键约束
-- MySQL中修改表中某列的数据类型 ALTER TABLE [COLUMN] 表名 MODIFY 列名 列定义; -- 删除外键约束 SHOW CREATE TABLE 表名; -- 复制CON ...
- python – 基于pandas中的列中的值从DataFrame中选择行
如何从基于pandas中某些列的值的DataFrame中选择行?在SQL中我将使用: select * from table where colume_name = some_value. 我试图看看 ...
- Pandas中查看列中数据的种类及个数
Pandas中查看列中数据的种类及个数 读取数据 import pandas as pd import numpy as np filepath = 'your_file_path.csv' data ...
- 【转载】C#如何获取DataTable中某列的数据类型
在C#的数据表格DataTable的操作中,有时候因为业务需要,我们需要获取到DataTable所有列或者某一列的数据类型,此时我们可以通过DataTable中的Columns属性对象的DataTyp ...
- Asp.net 修改已有数据的DataTable中某列的数据类型
DataTable dt_PI = new DataTable(); //克隆表结构 dt_PI = ds.Tables[].Clone(); dt_PI.Columns["FLTFullP ...
- pandas中一列含有多种数据类型的转换:科学计算法转浮点数、字符映射
import pandas as pd import re def getNum(x): """ 科学计数法和字符转浮点数 """ if r ...
- SQL中改变列的数据类型
一.该列非主键.无default约束 直接更新: alter table 表名 alter column 列名 数据类型 二.该列为主键列.无default约束 (1)删除主键 alter table ...
- [译] Pandas中根据列的值选取多行数据
# 选取等于某些值的行记录 用 == df.loc[df['column_name'] == some_value] # 选取某列是否是某一类型的数值 用 isin df.loc[df['column ...
随机推荐
- Java并发编程原理与实战三十五:并发容器ConcurrentLinkedQueue原理与使用
一.简介 一个基于链接节点的无界线程安全队列.此队列按照 FIFO(先进先出)原则对元素进行排序.队列的头部 是队列中时间最长的元素.队列的尾部 是队列中时间最短的元素.新的元素插入到队列的尾部,队列 ...
- Flash数据的采集方法-搜房房价走势采集
一般来说flash中的数据是不能被现有技术很容易采集到的,但是也不能谈flash色变,要具体问题具体分析,有些flash是可以通过一些分析发现背后的数据.然后采集就变得很容易了. 具体案例:搜房房价走 ...
- 【BZOJ】3786: 星系探索
[题意]给定一棵带点权树,三种操作: 1.询问点x到根的路径和 2.子树x内的点权加定值y 3.将点x的父亲更换为y,保证仍是树. [算法]平衡树(fhq-treap) [题解] 将树的dfs序作为序 ...
- 《C语言程序设计基础I》秋季学习总结
希望下学期比这学期轻松,学习能力上升,只是越发丰富. 一步一步的走踏实了
- 【leetcode 简单】 第八十一题 4的幂
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方. 示例 1: 输入: 16 输出: true 示例 2: 输入: 5 输出: false 进阶: 你能不使用循环或者递 ...
- 63、使用Timer类来实现定时任务
定时任务 定时任务就是让计算机自动的每隔一段时间执行的代码.比如要实现这样的一个功能:让计算机每隔5秒钟,在控制台打印一个www.monkey1024.com可以使用java.util包下的Timer ...
- ASP.NET 前台Javascript调用后台代码 / 后台调用前台Javascript
1:ASP.NET 前台Javascript调用后台代码 1.1:前台Javascript <script> function CallCs() { var str = "< ...
- nginx+tomat https ssl 部署 完美解决方案
关于nginx+tomcat https的部署之前网上一直有2种说法: 1.nginx和tomcat都要部署ssl证书 2.nginx部署ssl证书,tomcat增加ssl支持 在实际的部署过程中ng ...
- 在JS数组指定位置插入元素
很多与数组有关的任务听起来很简单,但实际情况并不总是如此,而开发人员在很多时候也用不到他.最近我碰到了这样一个需求: 将一个元素插入到现有数组的特定索引处.听起来很容易和常见,但需要一点时间来研究它. ...
- 一个罕见的MSSQL注入漏洞案例
一个罕见的MSSQL注入漏洞案例 这里作者准备分享一个在去年Google赏金计划中发现的相当罕见漏洞,也是作者在整个渗透测试生涯中唯一一次遇到的. 目标网站使用了微软 SQL Server 数据库并且 ...