下面给大家介绍下熊猫读取CSV文件时查看修改各列的数据类型格式,具体内容如下所述:
我们在调错误的时候会经常查看,修改熊猫列数据的数据类型,今天就总结一下:
1。查看:
,,Numpy和熊猫的查看方式略有不同,一个是dtype,一个是dtypes
打印(Array.dtype) #输出int64 打印(df.dtypes) #输出Df下所有列的数据格式:int64, b: int64
2。修改
熊猫作为pd导入 进口numpy np df=pd.read_csv (000917. csv,编码=' gbk ') df=df (df['涨跌幅的]!='没有'] df['涨跌幅')=df(“涨跌幅的].astype (np.float64) print (df (df['涨跌幅”)在5]) >之前
先看一个非常简单的例子:
a=[[' a ', ' 1.2 ', ' 4.2 '], [' b ', ' 70 ', ' 0.03 '], [' x ', ' 5 ', ' 0 ']] df=pd.DataFrame (a)有什么方法可以将列转换为适当的类型?例如,上面的例子,如何将列2和3转为浮点数?有没有办法将数据转换为DataFrame格式时指定类型?或者是创建DataFrame,然后通过某种方法更改每列的类型?理想情况下,希望以动态的方式做到这一点,因为可以有数百个列,明确指定哪些列是哪种类型太麻烦。可以假定每列都包含相同类型的值。
可以用的方法简单列举如下:
对于创建DataFrame的情形
如果要创建一个DataFrame,可以直接通过dtype参数指定类型:
df=pd。DataFrame (dtype=案《?#示例1 df=pd.DataFrame (data=https://www.yisu.com/zixun/d, dtype=np.int8) #示例2 df=pd.read_csv (“somefile。csv”, dtype={column_name: str})对于单列或者系列
下面是一个字符串系列的例子,它的dtype为对象:
在在在s=pd。系列([' 1 ',' 2 ',' 4.7 ',“熊猫”,“10”)) 在在在年代 0 1 1 2 2 4.7 3熊猫 4 10 >以前dtype:对象使用to_numeric转为数值。默认情况下,它不能处理字母型的字符串“熊猫”:
在在在pd.to_numeric (s) #或pd。to_numeric(年代,错误=岣摺? ValueError:无法解析字符串可以将无效值强制转换为南,如下所示:
在在在pd。to_numeric(年代,错误=扒科取? 0 1.0 1 2.0 2 4.7 3南 4 10.0 dtype: float64如果遇到无效值,第三个选项就是忽略该操作:
在在在pd。to_numeric(年代,错误=昂雎浴? #返回原系列没有对于多列或者整个DataFrame
如果想要将这个操作应用到多个列,依次处理每一列是非常繁琐的,所以可以使用DataFrame.apply处理每一列。对于某个DataFrame:
在在在a=[[' a ', ' 1.2 ', ' 4.2 '], [' b ', ' 70 ', ' 0.03 '], [' x ', ' 5 ', ' 0 ']] 在在在df=pd。DataFrame(列=[‘col1’,‘col2’, ' col3 ']) 在在在df col1 col2 col3 0 1.2 4.2 1 b 70 0.03 2 x 5 0然后可以写:
df [[‘col2’,‘col3]]=df [[‘col2’,‘col3]]苹果(pd.to_numeric)那么‘col2’和‘col3根据需要具有float64类型。
但是,可能不知道哪些列可以可靠地转换为数字类型。在这种情况下,设置参数:
df.apply (pd。to_numeric错误=昂雎浴?然后该函数将被应用于整个DataFrame,可以转换为数字类型的列将被转换,而不能(例如,它们包含非数字字符串或日期)的列将被单独保留。
另外pd.to_datetime和pd.to_timedelta可将数据转换为日期和时间戳。
软转换——类型自动推断
版本0.21.0引入了infer_objects()方法,用于将具有对象数据类型的DataFrame的列转换为更具体的类型。
例如,用两列对象类型创建一个DataFrame,其中一个保存整数,另一个保存整数的字符串:
在在在df=pd。DataFrame ({a: [7, 1、5] b: [' 3 ', ' 2 ', ' 1 ']}, dtype='对象') 在在在df.dtypes 一个对象 b对象 >以前dtype:对象熊猫读取CSV文件时查看修改各列的数据类型格式