将每个单独的列设置为具有自己的数据类型

时间:2014-10-26 11:53:06

标签: python python-2.7 pandas dataframe types

如何为每一列设置特定的数据类型?

我打开了一个.txt文件,其中包含236列Pandas。

例如,我有一个名为“System Time”的列,另一个名为“Temperature”,另一个名为“Alarm”,...

对于“系统时间”我想使用DateTime,对于“温度”,我想使用float因为值有十进制数(例如24.4)和“报警” “我想使用string

有人能帮助我吗?

2 个答案:

答案 0 :(得分:0)

当Pandas读取您的文件(例如使用pd.read_csv)构建DataFrame时,它会自动选择适当的数据类型(dtype)来逐列保存数据。这意味着一列十进制数字将具有float64类型,依此类推。

如果您有多达236列,那么让Pandas找出最佳数据类型可能是最容易的。

日期处理起来可能比较棘手,因此您可能希望更明确地了解Pandas应该将哪些列解析为datetime类型。您可以在使用pd.to_datetime(df["System Time"])构建DataFrame后执行此操作。


如果您想在构造期间控制每列的​​数据类型,许多Pandas方法允许您传入列名称的列表或字典以及它们的类型应该是什么。

例如,如果您使用pd.read_csv,则可以使用dtype关键字参数:

  

dtype列名称或词典 - >输入

     

数据或列的数据类型。例如。 {'a': np.float64, 'b': np.int32}

例如,您可以选择以与此类似的方式构建DataFrame:

df = pd.read_csv('file.txt', names=["Temperature", "Alarm"],
                  dtypes=[np.float64, object])

N.B。 Pandas中没有string数据类型;这些值通常具有数据类型object

答案 1 :(得分:0)

您可以使用astype(<Type>)转换列的所有元素。

让我们通过这个简单的例子来解释如何做到这一点。

import pandas as pd
x = [['0.3', '13', '14','03/22/2015'], ['1', '89', '3','24/02/2014'], ['4', '23', '0','04/13/2013']]
df = pd.DataFrame(x, columns=['A', 'B', 'C','D'])

print df.dtypes

输出:每列的类型是&#34;对象&#34;

A    object
B    object
C    object
D    object
dtype: object

通过使用astype(<Type>),我们可以转换类型。

df['A'] = df['A'].astype(float)   # To Float
df['B'] = df['B'].astype(str)     # To Str
df['C'] = df['C'].astype(int)     # To Int
df['D'] = pd.to_datetime(df['D']) # To DateTime

print df.dtypes

结果:

A           float64
B            object
C             int64
D    datetime64[ns]
dtype: object

您还可以在阅读CSV文件后使用dtype和:

指定类型
`df= pd.read_csv("data.csv", dtype={'A':float})`