pandas - panda: 更改列的数据类型

我希望将一个表(表示为列表列表)转换为Pandas DataFrame ,作为一个极其简化的例子:


a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a)

将列转换为适当类型的最佳方法是什么?在这种情况下,将第2列和第3列转换为浮点数?是否可以在转换为DataFrame时指定类型? 或者最好首先创建DataFrame,然后遍历列以更改每个列的类型? 理想情况下,我想以动态方式做这个,因为会有数百列,我不想指定哪些列,我能保证的是每个列都包含相同类型的值。

时间:

这个?


a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
df
Out[16]: 
 one two three
0 a 1.2 4.2
1 b 70 0.03
2 x 5 0

df.dtypes
Out[17]: 
one object
two object
three object

df[['two', 'three']] = df[['two', 'three']].astype(float)

df.dtypes
Out[19]: 
one object
two float64
three float64

正如上面提到的,convert_objects可以用于强制DataFrame中的object列为更合适的数据类型。

此方法的优点是可以一次性将它应用到整个DataFrame : 不需要单独选择列,也不需要使用astype ,如果列不能转换为非对象数据类型,则只保留一个列。

例如,该方法将强制DataFrame的列将数字字符串保存到适当的数值数据类型:


>>> vals = [['q', '1', '4.2'], ['e', '70', '0.03'], ['d', '5', '0']]
>>> df = pd.DataFrame(vals, columns=['a', 'b', 'c'])
>>> df
 a b c
0 q 1 4.2
1 e 70 0.03
2 d 5 0

>>> df.dtypes # all columns have the object datatype
a object
b object
c object

>>> df.convert_objects(convert_numeric=True).dtypes # some columns can be converted 
a object
b int64
c float64

在这里,它为值选择最合适的数值类型,无法将列a转换为数字(或日期)类型,因此未被修改,列b只包含整数,因此转换为int64类型,因为它包含浮点数字符串,所以,列c中的值被强制转换为float64数据类型。

此方法返回DataFrame的副本。

...