【发布时间】: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,请您提出一些解决方案