更新至2018.5.31
字典生成DataFrame
今天一个字典生成一个DataFrame,采用了以下形式,每一个value都是一个数(不是vector)
df = pd.DataFrame({
'id': data_speed.index,
'Mileage':data_speed['count']*data_speed['mean'],
'SpeedAve':data_speed['mean'],
'SpeedStd':data_speed['std'],
'SpeedMax':data_speed['max'],
'HeightAve':data_height['mean'],
'HeightStd':data_height['std'],
})
结果爆出了如下错误
ValueError: If using all scalar values, you must pass an index
原来所以,将字典生成DataFrame,您可以用{'A':[ 'a'], 'B': ['b']}
,当然也不一定非要这样,所以三种方法是可以成功的:
引自: 统计师的Python日记:第四天的补充
第一种:{'A':['a'], 'B': ['b']}
>>> df = pd.DataFrame({'A': ['a'], 'B': ['b']})
>>> df
A B
0 a b
第二种:传入索引index
>>> df = pd.DataFrame({'A': 'a', 'B': 'b'}, index=[0])
>>> df
A B
0 a b
第三种:DataFrame([dict])
>>> df = pd.DataFrame([{'A': 'a', 'B': 'b'}])
>>> df
A B
0 a b
unhashable type: 'numpy.ndarray'
这是一个大众的错误,pandas的DataFrame在列选择和行选择的时候几乎截然不同,而改错误几乎都出现在行选择的时候。
>>> X=pd.DataFrame([[1],[2],[3],[4],[5],[6]])
>>> X[[1,3,4],:]
TypeError: unhashable type: 'list'
行选择只有三种方法:
- 对于连续的选择,采用matlab式的slicing方法:
>>> X[1:3]
0
1 2
2 3
- 对于不连续的行选择,采用iloc[]方法,这个是基于位置的选择
>>> X.iloc[[1,3,4]]
0
1 2
3 4
4 5
- 对于不连续的行选择,采用loc[]方法,这个是基于index的选择
>>> X.loc[[1,3,4]]
0
1 2
3 4
4 5
这两种方法在这个例子中没有区别,因为其位置就是其index