我正在学习 Pandas,我遇到了一个有趣的问题。所以我有一个像这样的数据框:
COL1 COL2 COL3
a 9/8/2016 2
b 12/4/2016 23
...
n 1/1/2015 21
Run Code Online (Sandbox Code Playgroud)
COL1 是字符串,Col2 是时间戳,Col3 是数字。现在我需要对此数据框进行一些分析,我想将所有非数字数据转换为数字。我尝试使用DictVectorizer()将 COL1 和 2 转换为数字,但首先我不确定这是否是执行此类操作的最佳方法,其次我不知道如何处理时间戳。当我使用 DictVectorizer 时,输出将如下所示:
{u'COL3: {0:2, 1:23 , ...,n:21}, 'COL1': {0: u'a', 1:'b', ... , n:'n'}, 'COL2': {0: u'9/8/2016' , 1: u'12/4/2016' , ... , n:u'1/1/2016'}}
Run Code Online (Sandbox Code Playgroud)
但根据我了解到的情况应该是这样的,或者至少我知道我需要这样的东西:
{COL1:'a', COL2: '9/8/2016' , COL3: 2 and so on}
Run Code Online (Sandbox Code Playgroud)
所以,问题: 1-将非数字(包括日期)转换为数字值以在 sklearn 库中使用的最佳方法是什么 2-使用 DictVectorize() 的正确方法是什么
任何帮助,将不胜感激。
要将非数字数据编码为数字,您可以使用 scikit-learn 的LabelEncoder。它将每个类别(例如 COL1 的a、b、 )编码c为整数。
假设 df 是您的数据框,请尝试:
from sklearn.preprocessing import LabelEncoder
enc = LabelEncoder()
enc.fit(df['COL1'])
df['COL1'] = enc.transform(df['col1'])
Run Code Online (Sandbox Code Playgroud)
enc.fit()创建相应的整数值。enc.transform()将编码应用于 df 值。对于第二列,使用 Pandas to_datetime()函数应该可以解决问题,就像 @quinn-weber 提到的那样,尝试:
df['COL2'] = pd.to_datetime(df['COL2'])
Run Code Online (Sandbox Code Playgroud)