小编Luk*_*uke的帖子

更新spark中的dataframe列

查看新的spark数据帧api,目前还不清楚是否可以修改数据帧列.

我怎么会去改变行的值xy一个数据帧的?

pandas这将是df.ix[x,y] = new_value

编辑:合并下面所述的内容,您无法修改现有数据框,因为它是不可变的,但您可以返回具有所需修改的新数据框.

如果您只想根据条件替换列中的值,例如np.where:

from pyspark.sql import functions as F

update_func = (F.when(F.col('update_col') == replace_val, new_value)
                .otherwise(F.col('update_col')))
df = df.withColumn('new_column_name', update_func)
Run Code Online (Sandbox Code Playgroud)

如果要对列执行某些操作并创建添加到数据帧的新列:

import pyspark.sql.functions as F
import pyspark.sql.types as T

def my_func(col):
    do stuff to column here
    return transformed_value

# if we assume that my_func returns a string
my_udf = F.UserDefinedFunction(my_func, T.StringType())

df = df.withColumn('new_column_name', my_udf('update_col'))
Run Code Online (Sandbox Code Playgroud)

如果您希望新列与旧列具有相同的名称,则可以添加其他步骤:

df = df.drop('update_col').withColumnRenamed('new_column_name', 'update_col')
Run Code Online (Sandbox Code Playgroud)

python apache-spark apache-spark-sql pyspark spark-dataframe

64
推荐指数
5
解决办法
10万
查看次数

熊猫长期以来通过两个变量进行广泛重塑

我有长格式的数据,我试图重塑到宽,但似乎没有一个直接的方法来使用融化/堆栈/取消堆栈:

Salesman  Height   product      price
  Knut      6        bat          5
  Knut      6        ball         1
  Knut      6        wand         3
  Steve     5        pen          2
Run Code Online (Sandbox Code Playgroud)

变为:

Salesman  Height    product_1  price_1  product_2 price_2 product_3 price_3  
  Knut      6        bat          5       ball      1        wand      3
  Steve     5        pen          2        NA       NA        NA       NA
Run Code Online (Sandbox Code Playgroud)

我认为Stata可以使用reshape命令执行类似的操作.

python reshape pandas

30
推荐指数
6
解决办法
5万
查看次数

Pyspark替换Spark数据帧列中的字符串

我想通过替换子字符串在Spark Dataframe列上执行一些基本的词干.最快的方法是什么?

在我目前的用例中,我有一个我想要规范化的地址列表.例如,这个数据帧:

id     address
1       2 foo lane
2       10 bar lane
3       24 pants ln
Run Code Online (Sandbox Code Playgroud)

会成为

id     address
1       2 foo ln
2       10 bar ln
3       24 pants ln
Run Code Online (Sandbox Code Playgroud)

python apache-spark pyspark

22
推荐指数
2
解决办法
5万
查看次数

在pandas数据框中对每一行进行排序的最快方法

我需要找到最快的方法来对数据帧中的每一行进行排序,其中包含数百万行和大约一百列.

所以像这样:

A   B   C   D
3   4   8   1
9   2   7   2
Run Code Online (Sandbox Code Playgroud)

需要成为:

A   B   C   D
8   4   3   1
9   7   2   2
Run Code Online (Sandbox Code Playgroud)

现在我正在对每一行应用sort并逐行构建一个新的数据帧.我也在为每一行做一些额外的,不太重要的事情(因此我为什么要使用熊猫而不是numpy).是否可以更快地创建列表列表,然后立即构建新的数据帧?或者我需要去cython吗?

python performance pandas

15
推荐指数
3
解决办法
1万
查看次数

将张量分成训练和测试集

假设我使用的是在文本文件中读取的TextLineReader.有没有办法把它分成火车和测试集Tensorflow?就像是:

def read_my_file_format(filename_queue):
  reader = tf.TextLineReader()
  key, record_string = reader.read(filename_queue)
  raw_features, label = tf.decode_csv(record_string)
  features = some_processing(raw_features)
  features_train, labels_train, features_test, labels_test = tf.train_split(features,
                                                                            labels,
                                                                            frac=.1)
  return features_train, labels_train, features_test, labels_test
Run Code Online (Sandbox Code Playgroud)

training-data cross-validation tensorflow

13
推荐指数
3
解决办法
2万
查看次数

如何在bfloat16中使用tf.keras

我正在尝试使用混合精度在tpu上运行tf.keras模型。我想知道如何使用bfloat16混合精度构建keras模型。是这样吗

with tf.contrib.tpu.bfloat16_scope():
    inputs = tf.keras.layers.Input(shape=(2,), dtype=tf.bfloat16)
    logits = tf.keras.layers.Dense(2)(inputs)

logits = tf.cast(logits, tf.float32)
model = tf.keras.models.Model(inputs=inputs, outputs=logits)
model.compile(optimizer=tf.keras.optimizers.Adam(.001),
              loss='mean_absolute_error', metrics=[])

tpu_model = tf.contrib.tpu.keras_to_tpu_model(
        model,
        strategy=tf.contrib.tpu.TPUDistributionStrategy(
            tf.contrib.cluster_resolver.TPUClusterResolver(tpu='my_tpu_name')
        )
    )
Run Code Online (Sandbox Code Playgroud)

python google-compute-engine keras tensorflow google-cloud-tpu

13
推荐指数
1
解决办法
508
查看次数

过滤列值是否等于Spark中的列表

我正在尝试根据列中的值是否等于列表来过滤Spark数据帧.我想做这样的事情:

filtered_df = df.where(df.a == ['list','of' , 'stuff'])
Run Code Online (Sandbox Code Playgroud)

其中filtered_df只包含行,其中的价值filtered_df.a就是['list','of' , 'stuff']和类型aarray (nullable = true).

python apache-spark apache-spark-sql pyspark

8
推荐指数
3
解决办法
8507
查看次数

pyspark:scarsey稀疏矩阵的稀疏向量

我有一个带有一列短句的火花数据框和一个带有分类变量的列.我想tf-idf对句子执行one-hot-encoding分类变量,然后将其输出到我的驱动程序上的稀疏矩阵,一旦它的尺寸小得多(对于scikit-learn模型).

以稀疏形式从火花中获取数据的最佳方法是什么?看起来toArray()稀疏矢量只有一种方法,它输出numpy数组.但是,文档确实说scipy稀疏数组可以用于代替spark sparse数组.

还要记住,tf_idf值实际上是一列稀疏数组.理想情况下,将所有这些功能集成到一个大型稀疏矩阵中会很不错.

scipy tf-idf apache-spark pyspark

8
推荐指数
1
解决办法
4099
查看次数

如何在tensorflow 2.0中通过额外的输入来使自定义丢失

使用tf.keras和数据集在TF 2.0中使用自定义损失函数和一个额外的参数时,我遇到很多麻烦。

在以下情况下,extra参数是模型中的输入数据,包含在中Dataset。在1.14的情况下,我将.make_one_shot_iterator().get_next()在数据集上运行,然后将张量传递到损失函数中。同一件事在2.0中不起作用。

class WeightedSDRLoss(keras.losses.Loss):

    def __init__(self, noisy_signal, reduction=keras.losses.Reduction.AUTO, name='WeightedSDRLoss'):
        super().__init__(reduction=reduction, name=name)
        self.noisy_signal = noisy_signal

    def sdr_loss(self, sig_true, sig_pred):
        return (-tf.reduce_mean(sig_true * sig_pred) /
                tf.reduce_mean(tf.norm(tensor=sig_pred) * tf.norm(tensor=sig_true)))

    def call(self, y_true, y_pred):
        noise_true = self.noisy_signal - y_true
        noise_pred = self.noisy_signal - y_pred
        alpha = (tf.reduce_mean(tf.square(y_true)) /
                 tf.reduce_mean(tf.square(y_true) + tf.square(self.noisy_signal - y_pred)))
        return alpha * self.sdr_loss(y_true, y_pred) + (1 - alpha) * self.sdr_loss(noise_true, noise_pred)

data_x = np.random.rand(5, 4, 1)
data_y = np.random.rand(5, 4, 1)

x = keras.layers.Input([4, 1]) …
Run Code Online (Sandbox Code Playgroud)

python tensorflow-datasets tf.keras tensorflow2.0

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

sklearn Random Forest分类器可以通过树调整样本大小,来处理类不平衡吗?

也许这太啰嗦了.关于sklearn的随机森林的简单问题:

对于真/假分类问题,sklearn的随机森林中是否有一种方法可以指定用于训练每棵树的样本大小,以及真假观察的比例?

更多详情如下:


在随机森林的R实现中,名为randomForest,有一个选项sampsize().这允许您根据结果平衡用于训练每棵树的样本.

例如,如果您试图预测结果是真还是假,并且训练集中90%的结果都是假的,您可以设置sampsize(500, 500).这意味着每棵树将在训练集中随机抽样(替换)进行训练,其中500真实和500错误观察.在这些情况下,我发现模型在使用50%截止值时可以更好地预测真实结果,从而产生更高的kappas.

在sklearn实现中似乎没有这样的选项.

  • 有没有办法在sklearn中模仿这个功能?
  • 只是根据Kappa统计数据优化截止值会得到类似的结果,还是在这种方法中丢失了什么?

python r classification random-forest scikit-learn

6
推荐指数
1
解决办法
2148
查看次数