python - 仅将数字的字符串表示形式转换为 Pandas 中的数字
问题描述
我有一个熊猫Dataframe
,我意识到当我的Dataframe
列只有数字的字符串表示时,就会发生转换,否则不会。我使用下面的代码将所有字符串形式的数字转换为数字。
import pandas as pd
from functools import partial
df = pd.DataFrame({0: ['3', 'r'], 1: ['1', 's']})
df = df.apply(partial(pd.to_numeric, errors='ignore'))
上面的代码不起作用,因为'r'
和's'
在列中。所以一切都将保持为字符串。我怎样才能得到代码来转换'3'
和'1'
数字3
和1
?
解决方案
正如@MadPhysicist所说,Pandas.Series 有一个dtype
. 但是,这dtype
可能object
意味着任何事情都会发生。你会因为拥有一个数字而失去很多优势,但这dtype
可能是你想要的。
强制非数字的东西NaN
df.apply(pd.to_numeric, errors='coerce')
0 1
0 3.0 1.0
1 NaN NaN
注意:
apply
遍历每一列并将该列传递给callable
给定的列。这意味着每一列都得到这样的处理:
pd.to_numeric(one_of_the_columns, errors='coerce')
使用errors='coerce'
可以使事情变得数字化,np.nan
否则。
使用dtype
对象并放弃效率......无论你想要做什么
df = df.applymap(lambda x: pd.to_numeric(x, errors='ignore'))
df
0 1
0 3 1
1 r s
要验证它是否实际更改3
为数字,请尝试:
df.applymap(type)
0 1
0 <class 'numpy.int64'> <class 'numpy.int64'>
1 <class 'str'> <class 'str'>
注意:
applymap
遍历数据帧的每个单元格,并将该单元格的值通过callable
传递。在这种情况下,每个单元格的处理方式如下:
pd.to_numeric(one_particular_cell, errors='ignore')
如果可能的话被变成一个数字,否则就不管了。
这是低效的,但可以做你想做的事。当 Pandas 试图调和您造成的损害时,它意识到某些列中存在混合类型并更改为dtype
以object
适应。
推荐阅读
- python - 生成峰度大于 3 的随机正态分布
- odoo - How to override wizard's method on odoo 12
- snowflake-cloud-data-platform - 众包 - Azure 的 DW 产品与 Snowflake 的区别
- javascript - 如何使用 if 语句关闭悬停效果
- laravel - Docker 上的 Laravel 的 MySQL 访问被拒绝
- python - Python: sorted insert into list
- html - 是否可以使用 CSS flexbox 在垂直和水平两个轴上收缩/拉伸内容?
- xml - 将 XML 文件复制到雪花表时捕获 XML 文件名
- sql - 'ORA-01843: not a valid month' 但格式正确?
- php - 我提出的每个请求都得到不同的 php 会话 ID。角前端