Pandas 错误笔记(持续更新)

更新至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

转载请注明原文链接,对本文有任何建议和意见请在评论区讨论,谢谢!
原文地址:https://www.cnblogs.com/bjwu/p/8975791.html