相关疑难解决方法(0)

随机数据帧行

我有以下DataFrame:

    Col1  Col2  Col3  Type
0      1     2     3     1
1      4     5     6     1
...
20     7     8     9     2
21    10    11    12     2
...
45    13    14    15     3
46    16    17    18     3
...
Run Code Online (Sandbox Code Playgroud)

从csv文件中读取DataFrame.所有具有Type1的行都在顶部,其次是具有Type2 的行,然后是具有Type3 的行等.

我想改组DataFrame的行,以便所有的行Type都是混合的.可能的结果可能是:

    Col1  Col2  Col3  Type
0      7     8     9     2
1     13    14    15     3
...
20     1     2     3     1
21    10    11    12     2
...
45     4     5     6 …
Run Code Online (Sandbox Code Playgroud)

python shuffle permutation dataframe pandas

345
推荐指数
8
解决办法
27万
查看次数

如何将DataFrame索引/系列列作为数组或列表?

您知道如何将DataFrame的索引或列作为NumPy数组或python列表获取吗?

python pandas

251
推荐指数
5
解决办法
51万
查看次数

在dask中改组数据

这是Subsetting Dask DataFrames的后续问题.我希望在将数据批量发送到ML算法之前对来自dask数据帧的数据进行混洗.

该问题的答案是做以下事情:

for part in df.repartition(npartitions=100).to_delayed():
    batch = part.compute()
Run Code Online (Sandbox Code Playgroud)

然而,即使我要改变批次的内容,我也有点担心它可能不太理想.数据是一个时间序列集,因此数据点在每个分区内高度相关.

理想情况下我喜欢的是:

rand_idx = np.random.choice(len(df), batch_size, replace=False)
batch = df.iloc[rand_idx, :]
Run Code Online (Sandbox Code Playgroud)

哪个适用于熊猫,但不适用于dask.有什么想法吗?

编辑1:潜在的解决方案

我试过了

train_len = int(len_df*0.8)
idx = np.random.permutation(len_df)
train_idx = idx[:train_len]
test_idx = idx[train_len:]
train_df = df.loc[train_idx]
test_df = df.loc[test_idx]
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试这样做,则train_df.loc[:5,:].compute()返回一个124451行数据帧.所以显然使用dask错了.

python dask

7
推荐指数
1
解决办法
1136
查看次数

TypeError:预期序列或类似数组,得到估计量

我正在开发一个对产品进行用户评论的项目.我使用TfidfVectorizer从我的数据集中提取功能,除了我手动提取的一些其他功能.

df = pd.read_csv('reviews.csv', header=0)

FEATURES = ['feature1', 'feature2']
reviews = df['review']
reviews = reviews.values.flatten()

vectorizer = TfidfVectorizer(min_df=1, decode_error='ignore', ngram_range=(1, 3), stop_words='english', max_features=45)

X = vectorizer.fit_transform(reviews)
idf = vectorizer.idf_
features = vectorizer.get_feature_names()
FEATURES += features
inverse =  vectorizer.inverse_transform(X)

for i, row in df.iterrows():
    for f in features:
        df.set_value(i, f, False)
    for inv in inverse[i]:
        df.set_value(i, inv, True)

train_df, test_df = train_test_split(df, test_size = 0.2, random_state=700)
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常.但当我将max_features45从更改为更高时,我会tran_test_split在线上出错.

错误是:

Traceback (most recent call last): File "analysis.py", line 120, …

python-2.7 pandas scikit-learn

6
推荐指数
2
解决办法
8515
查看次数

在训练,验证和测试集中对熊猫数据框进行分层划分

以下经过极端简化的DataFrame表示包含医疗诊断的更大的DataFrame:

medicalData = pd.DataFrame({'diagnosis':['positive','positive','negative','negative','positive','negative','negative','negative','negative','negative']})
medicalData

    diagnosis
0   positive
1   positive
2   negative
3   negative
4   positive
5   negative
6   negative
7   negative
8   negative
9   negative
Run Code Online (Sandbox Code Playgroud)

对于机器学习,我需要通过以下方式将该数据帧随机分为三个子帧

trainingDF, validationDF, testDF = SplitData(medicalData,fractions = [0.6,0.2,0.2])
Run Code Online (Sandbox Code Playgroud)

在拆分数组指定进入每个子帧的完整数据的一部分的情况下,子帧中的数据需要互斥,拆分数组的总和必须为1。 另外,每个子集中阳性诊断的比例必须大致相同。

对于这个问题的答案建议使用pandas示例方法sklearn的train_test_split函数。但是这些解决方案似乎都不能很好地推广到n个拆分,也没有一个提供分层拆分。

python machine-learning dataframe pandas deep-learning

6
推荐指数
2
解决办法
4943
查看次数

如何将数据帧拆分为多个数据帧,其中每个数据帧包含相等但随机的数据

如何将数据帧拆分为多个数据帧,其中每个数据帧包含相等但随机的数据?它不是基于特定列.

例如,我在数据帧中有一个100行和30列.我想将这些数据分成5个批次.我应该在每个数据框中有20个记录,每个数据框有相同的30列,并且所有5个批次都没有重复,我选择行的方式应该是随机的.我不希望在单个列上随机选择.

我认为我将使用index和numpy并将它们分成多个并使用它来分割数据帧的一种方法.想要看看有人有一个简单的熊猫方式.

pandas

5
推荐指数
1
解决办法
4783
查看次数