我正在学习熊猫,我遇到了一个有趣的问题。所以我有一个像这样的Dataframe:
COL1 COL2 COL3
a 9/8/2016 2
b 12/4/2016 23
...
n 1/1/2015 21
COL1是字符串,Col2是时间戳,Col3是数字。现在我需要对此Dataframe进行一些分析,并且我想将所有非数字数据转换为数字。我尝试使用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'}}
但是从我学到的东西应该是这样的,或者至少我知道我需要这样的东西:
{COL1:'a', COL2: '9/8/2016' , COL3: 2 and so on}
所以,问题: 1 - 将非数字(包括日期)转换为数值以在sklearn库中使用的最佳方法是什么 2-使用DictVectorize()
的正确方法是什么任何帮助将不胜感激。
答案 0 :(得分:3)
要将非数字数据编码为数字,您可以使用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'])
enc.fit()
创建相应的整数值。enc.transform()
将编码应用于df值。对于第二列,使用Pandas to_datetime()函数应该可以解决问题,就像@ quinn-weber提到的那样,尝试:
df['COL2'] = pd.to_datetime(df['COL2'])
答案 1 :(得分:1)
您可以使用以下内容转换COL1:
<Host name="localhost" appBase="webapps">
...
<Context docBase="/your/path/with/pdfs" path="/pdfs/" />
</Host>
至于时间戳,你可以这样做:
import pandas as pd
import string
table = pd.DataFrame([
['a','9/8/2016',2],
['b','12/4/2016',23],
['n','1/1/2015',21],
], columns=['COL1', 'COL2', 'COL3'])
table['COL1'] = table['COL1'].map(dict(zip(list(string.lowercase), xrange(0,25))))
答案 2 :(得分:0)
表示字符串
考虑
s = pd.Series(list('abcdefagbfhickjjmshh'))
# get unique values
u = s.unique()
# gen a mapping series
m = pd.Series(range(len(u)), u)
# encode
s.map(m)
0 0
1 1
2 2
3 3
4 4
5 5
6 0
7 6
8 1
9 5
10 7
11 8
12 2
13 9
14 10
15 10
16 11
17 12
18 7
19 7
dtype: int64
日期
有两种方法可以做到这一点。如果您不关心日期的相对位置,请使用与字符串相同的确切方法。否则
考虑
d = pd.date_range('2015-03-31', periods=20).to_series().reset_index(drop=True)
pd.Series(d.values.astype(np.timedelta64), d.index, np.int64)
0 1427760000000000000
1 1427846400000000000
2 1427932800000000000
3 1428019200000000000
4 1428105600000000000
5 1428192000000000000
6 1428278400000000000
7 1428364800000000000
8 1428451200000000000
9 1428537600000000000
10 1428624000000000000
11 1428710400000000000
12 1428796800000000000
13 1428883200000000000
14 1428969600000000000
15 1429056000000000000
16 1429142400000000000
17 1429228800000000000
18 1429315200000000000
19 1429401600000000000
dtype: int64