【跟着stackoverflow学Pandas】
来源:互联网 发布:淘宝钓鱼卖家 编辑:程序博客网 时间:2024/05/03 06:48
最近做一个系列博客,跟着stackoverflow学Pandas。
专栏地址:http://blog.csdn.net/column/details/16726.html
以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序:
https://stackoverflow.com/questions/tagged/pandas?sort=votes&pageSize=15
Pandas: change data type of columns - Pandas修改列的类型
https://stackoverflow.com/questions/15891038/pandas-change-data-type-of-columns
数据集
import pandas as pda = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]df = pd.DataFrame(a, columns=['col1', 'col2', 'col3'])print df.head()# col1 col2 col3# 0 a 1.2 4.2# 1 b 70 0.03# 2 x 5 0print df.dtypes# col1 object# col2 object# col3 object# dtype: object
这里的3列数据,col1是明显的字符数据,col2、col3是数值型数据,但是因为数据在导入时加了引号,按照字符串数据来处理,如果我们想对他们进行数值操作,就需要进行转换。
下面我们推荐几种方法
pd.to_numeric
对于明显是数值的数据,转换类型直接采用 pd.to_numeric 就可以了,如果数据既有数值型又有字符型,那么我们就要根据情况区别对待了。
s = pd.Series(['1', '2', '4.7', 'pandas', '10'])# pd.to_numeric(s) # 如果直接转换会报错# ValueError: Unable to parse string "pandas" at position 3# 可以强制转换,字符型数据就会变成 NaN,数据类型变为 float64pd.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
如果有多个列需要转换,可以采用apply进行批量操作。
df[['col2','col3']] = df[['col2','col3']].apply(pd.to_numeric, errors='ignore') # 同样可以添加 errors 参数print df# col1 col2 col3# 0 a 1.2 4.20# 1 b 70.0 0.03# 2 x 5.0 0.00print df.dtypes# col1 object# col2 float64# col3 float64# dtype: object
相似的函数,还有 pd.to_datetime、pd.to_timedelta,可以实现对时间的转换。
astype
pd.to_numeric 用起来很简单,但是它把所有的变量都变成了float64,那么如果数据是整形呢。我们可以试试 astype 函数。
a = [['a', '1', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]df = pd.DataFrame(a, columns=['one', 'two', 'three'])print df# one two three# 0 a 1 4.2# 1 b 70 0.03# 2 x 5 0print df.dtypes# one object# two object# three object# dtype: object# 批量操作df[['two', 'three']] = df[['two', 'three']].astype(float)print df.dtypes# one object# two float64# three float64# dtype: objectdf['two'] = df['two'].astype(int)print df.dtypes# one object# two int64# three float64# dtype: object
生成DataFrame时指定变量类型
df = pd.DataFrame(a, columns=['one', 'two', 'three'], dtype={'one': str, 'two': int, 'three': float})
infer_objects
如果数据很多无法判断数据类型,可以采用 infer_objects(Pandas Version 0.21.0)
df = pd.DataFrame({'a': [7, 1, 5], 'b': ['3','2','1']}, dtype='object')df.dtypes# a object# b object# dtype: objectdf = df.infer_objects()df.dtypes# a int64# b object # 因为b列加了引号,推断成了字符串# dtype: object
阅读全文
0 0
- 【跟着stackoverflow学Pandas】
- 【跟着stackoverflow学Pandas】
- 【跟着stackoverflow学Pandas】- 删除带有NaN的行
- 【跟着stackoverflow学Pandas】“Large data” work flows using pandas-pandas大数据处理流程
- 【跟着stackoverflow学Pandas】Renaming columns in pandas-列的重命名
- 【跟着stackoverflow学Pandas】Delete column from pandas DataFrame-删除列
- 【跟着stackoverflow学Pandas】How to iterate over rows in a DataFrame in Pandas-DataFrame按行迭代
- 【跟着stackoverflow学Pandas】add one row in a pandas.DataFrame -DataFrame添加行
- 【跟着stackoverflow学Pandas】 -Get list from pandas DataFrame column headers
- 【跟着stackoverflow学Pandas】--Converting a Pandas GroupBy object to DataFrame-Groupby对象转换为DataFrame
- 【跟着stackoverflow学Pandas】- apply、applymap、map 三者使用差异
- 【跟着stackoverflow学Pandas】Select rows from a DataFrame based on values in a column -pandas 筛选
- 【跟着stackoverflow学Pandas】-How do I get the row count of a Pandas dataframe-获取DataFrame行数
- 跟着vivi学bootloader
- 跟着学制表
- 跟着示例学Oozie
- 跟着示例学Oozie
- 跟着示例学Oozie
- Xamarin.Forms调用吐司
- 接口自动化之 JsonArrayTest
- Windows PowerShell 实战指南-动手实验-11.7
- 第六章:vue2组件及组件间通信
- 算法学习之旅,初级篇(19)--替换空格
- 【跟着stackoverflow学Pandas】
- 2017杭电多校第七场1005Euler theorem
- [笔记分享] [SD] msm8926 sd 探测流程
- tf.nn.in_top_k()的用法
- poj 2392 Space Elevator(多重背包)
- python文件打包
- poj 2406 Power Strings【KMP】
- Java进阶之路——从初级程序员到架构师,从小工到专家 Java程序员-10 发表于1小时前 原 Java进阶之路——从初级程序员到架构师,从小工到专家
- UVA 10328 Coin Toss【带限制条件的递推dp+计数技巧+高精度用java】