【问题标题】:AttributeError: 'DataFrame' object has no attribute 'ravel'AttributeError:“DataFrame”对象没有属性“ravel”
【发布时间】:2015-05-15 23:01:28
【问题描述】:

我正在尝试测试在其他系统上运行良好的熊猫程序。

import pandas as pd
import numpy as np
from pandas import Series, DataFrame
ds1 = pd.read_table('data.txt', sep=' ', header=None)
ds2 = pd.read_table('Dataset.txt', header=None, sep=' ')
out = ds1.copy()

_,C = np.where(ds1.ravel()[:,None] == ds2[:,0])

newvals = ds2[C,1]

# Valid positions in output array to be changed
valid = np.in1d(ds1.ravel(),ds2[:,0])

# Finally make the changes to get desired output
out.ravel()[valid] = newvals
print out

当我尝试它时,

    _,C = np.where(ds1.ravel()[:,None] == ds2[:,0])
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/generic.py", line 1947, in __getattr__
    (type(self).__name__, name))
AttributeError: 'DataFrame' object has no attribute 'ravel'

更新

样本原始数据:

ds1 = pd.read_table('https://gist.githubusercontent.com/karimkhanp/9527bad750fbe75e072c/raw/ds1', sep=' ', header=None)
ds2 = pd.read_table('https://gist.githubusercontent.com/karimkhanp/1692f1f76718c35e939f/raw/6f6b348ab0879b702e1c3c5e362e9d2062e9e9bc/ds2', header=None, sep=' ')

【问题讨论】:

  • 你能解释一下你想在这里比较什么吗,看起来你正在尝试像在 df 上切片一样使用 numpy 但这不起作用
  • 你的 dfs 的形状完全不同 ds1 是 (40,1001) 而 ds2 是 (4000,2) 你不能使用你的方法比较数组你需要清楚地解释你想要什么实现
  • @EdChum:我正在尝试按照此列表中的描述实现stackoverflow.com/questions/30067356/…
  • 我认为您需要了解该问题要解决的问题以及这与您的数据有何关系,例如清理以下内容:_,C = np.where(ds1.values.ravel()[:,None] == ds2.values[:,0]) newvals = ds2.loc[C,1] # Valid positions in output array to be changed valid = np.in1d(ds1.values.ravel(),ds2.values[:,0]) 但最后一行将在您尝试时失败将 str 值与没有意义的浮点数进行比较,您的 6 列是 str dtype
  • @EdChum: ds2 在我们两种情况下都是一样的,在ds1 我只有大的matrix,请您提出一些解决方案

标签: python pandas


【解决方案1】:

嗯,错误很明显,你想访问 numpy values 属性:

_,C = np.where(ds1.values.ravel()[:,None] == ds2[:,0])

【讨论】:

  • 这会在同一行给出TypeError: unhashable type
猜你喜欢
  • 2015-02-07
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 2017-01-24
  • 2018-10-10
  • 2019-08-18
相关资源
最近更新 更多