小编Iva*_*van的帖子

在Spark 1.6 Dataframe上的其他字段中获取每个组的不同元素

我正在尝试按星期在Spark数据框中进行分组,并为每个组计算一列的唯一值:

test.json
{"name":"Yin", "address":1111111, "date":20151122045510}
{"name":"Yin", "address":1111111, "date":20151122045501}
{"name":"Yln", "address":1111111, "date":20151122045500}
{"name":"Yun", "address":1111112, "date":20151122065832}
{"name":"Yan", "address":1111113, "date":20160101003221}
{"name":"Yin", "address":1111111, "date":20160703045231}
{"name":"Yin", "address":1111114, "date":20150419134543}
{"name":"Yen", "address":1111115, "date":20151123174302}
Run Code Online (Sandbox Code Playgroud)

和代码:

import pyspark.sql.funcions as func
from pyspark.sql.types import TimestampType
from datetime import datetime

df_y = sqlContext.read.json("/user/test.json")
udf_dt = func.udf(lambda x: datetime.strptime(x, '%Y%m%d%H%M%S'), TimestampType())
df = df_y.withColumn('datetime', udf_dt(df_y.date))
df_g = df_y.groupby(func.hour(df_y.date))    
df_g.count().distinct().show()
Run Code Online (Sandbox Code Playgroud)

pyspark的结果是

df_y.groupby(df_y.name).count().distinct().show()
+----+-----+
|name|count|
+----+-----+
| Yan|    1|
| Yun|    1|
| Yin|    4|
| Yen|    1|
| Yln|    1|
+----+-----+
Run Code Online (Sandbox Code Playgroud)

而我对大熊猫的期待是这样的:

df …
Run Code Online (Sandbox Code Playgroud)

python apache-spark pyspark

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

Numpy 随机种子对整个 jupyter 笔记本有效

我正在使用numpy.randomJupyter Lab 笔记本上的函数,我正在尝试使用numpy.random.seed(333). 仅当种子设置与代码位于同一笔记本单元格中时,这才按预期工作。例如,如果我有一个这样的脚本:

import numpy as np

np.random.seed(44)

ll = [3.2,77,4535,123,4]

print(np.random.choice(ll))
print(np.random.choice(ll))
Run Code Online (Sandbox Code Playgroud)

两者的输出np.random.choice(ll)将相同,因为种子已设置:

# python seed.py
4.0 
123.0
# python seed.py
4.0
123.0
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试在 Jupyter notebook 上做同样的事情,我会得到不同的结果:

# in [11]
import numpy as np
# even if I set the seed here the other cells don't see it
np.random.seed(333)

# in [12]
np.random.choice([1,23,44,3,2])
23
# gets the same numbers

# in [13]
np.random.choice([1,23,44,3,2])
44
# gets different numbers every time I run …
Run Code Online (Sandbox Code Playgroud)

python numpy jupyter-notebook

16
推荐指数
1
解决办法
8412
查看次数

使用Shapely绘制一个椭圆

我正在将Shapely集成到我的代码中,我必须处理几种不同类型的几何对象.我的大多数需求都满足于Lines,Polygons和LineStrings,但我需要使用省略号.有没有办法通过边界框或半轴形状地创建椭圆,而不必将椭圆离散成线?

干杯!

python shapely

14
推荐指数
2
解决办法
6772
查看次数

如何在pandas中读取带有分号分隔符的文件

.csv用pandas在python中导入一个文件.

以下是来自的文件格式.csv:

a1;b1;c1;d1;e1;...
a2;b2;c2;d2;e2;...   
.....
Run Code Online (Sandbox Code Playgroud)

这是如何得到它:

from pandas import *
csv_path = "C:...."
data = read_csv(csv_path)
Run Code Online (Sandbox Code Playgroud)

现在,当我打印文件时,我得到了:

0  a1;b1;c1;d1;e1;...
1  a2;b2;c2;d2;e2;...   
Run Code Online (Sandbox Code Playgroud)

等等...所以我需要帮助来读取文件并使用半颜色字符拆分列中的值;.

python csv pandas

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

使用Scikit Learn对时间序列pandas数据框进行线性回归

我正在尝试使用scikit学习线性回归量对pandas数据帧进行简单的线性回归.我的数据是时间序列,pandas数据框有一个日期时间索引:

                value
2007-01-01    0.771305
2007-02-01    0.256628
2008-01-01    0.670920
2008-02-01    0.098047
Run Code Online (Sandbox Code Playgroud)

做一些简单的事情

from sklearn import linear_model

lr = linear_model.LinearRegression()

lr(data.index, data['value'])
Run Code Online (Sandbox Code Playgroud)

不起作用:

float() argument must be a string or a number
Run Code Online (Sandbox Code Playgroud)

所以我尝试创建一个包含日期的新列,以尝试对其进行转换:

data['date'] = data.index
data['date'] = pd.to_datetime(data['date'])
lr(data['date'], data['value'])
Run Code Online (Sandbox Code Playgroud)

但现在我得到:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
Run Code Online (Sandbox Code Playgroud)

因此回归量无法处理日期时间.我看到了一些将整数数据转换为datetime的方法,但是找不到从datetime转换为integer的方法,例如.

这样做的正确方法是什么?

PS:我对使用scikit感兴趣,因为我打算稍后用它做更多的东西,所以现在没有statsmodels.

python pandas

10
推荐指数
1
解决办法
8602
查看次数

最好使用元组或numpy数组来存储坐标

我正在将一个C++科学应用程序移植到python,因为我是python的新手,我想到了一些问题:

1)我正在定义一个包含坐标(x,y)的类.这些值将被访问多次,但它们只会在类实例化后读取.在内存和访问时间方面使用元组或numpy数组是否更好?

2)在某些情况下,这些坐标将用于构建复数,在复杂函数上进行评估,并将使用此函数的实际部分.假设无法分离此函数的实部和复杂部分,并且最后必须使用实部,可能最好直接使用复数来存储(x,y)?在python中从复杂到真实的转换有多糟糕?c ++中的代码执行了很多这些转换,这在代码中是一个很大的减速.

3)还必须执行一些坐标转换,对于坐标,将分别访问x和y值,转换完成,并返回结果.坐标变换是在复平面中定义的,因此直接使用组件x和y比依赖复杂变量更快?

谢谢

python arrays tuples numpy complex-numbers

9
推荐指数
1
解决办法
4131
查看次数

在Jupyter笔记本上的MathJax的本地副本

我正在使用新的Jupyter笔记本(neéipythonnotebook),文档表明它从CDN呈现MathJax.我在某些情况下阻止外部连接,因此我需要为所有笔记本配置MathJax的本地副本.我怎么能做到这一点?

python ipython jupyter

9
推荐指数
3
解决办法
3734
查看次数

在PySpark数据框中选择特定列以提高性能

使用从Hive导入的Spark数据帧,有时我最终得到了几个我不需要的列.假设我不想用它们过滤它们

df = SqlContext.sql('select cols from mytable')
Run Code Online (Sandbox Code Playgroud)

我正在导入整个表格

df = SqlContext.table(mytable)
Run Code Online (Sandbox Code Playgroud)

select和后续cache提高性能/减少内存使用,如

df = df.select('col_1', 'col_2', 'col_3')
df.cache()
df.count()
Run Code Online (Sandbox Code Playgroud)

或者只是浪费时间?我会做很多的操作和数据操作上df,如avg,withColumn等.

apache-spark apache-spark-sql pyspark

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

如何使用子图创建Pandas groupby图?

我有一个这样的数据框:

     value     identifier
2007-01-01  0.781611      55
2007-01-01  0.766152      56
2007-01-01  0.766152      57
2007-02-01  0.705615      55
2007-02-01  0.032134      56 
2007-02-01  0.032134      57
2008-01-01  0.026512      55
2008-01-01  0.993124      56
2008-01-01  0.993124      57
2008-02-01  0.226420      55
2008-02-01  0.033860      56
2008-02-01  0.033860      57
Run Code Online (Sandbox Code Playgroud)

所以我按标识符进行分组:

df.groupby('identifier')
Run Code Online (Sandbox Code Playgroud)

现在我想在网格中生成子图,每组一个图.我试过了两个

df.groupby('identifier').plot(subplots=True)
Run Code Online (Sandbox Code Playgroud)

要么

df.groupby('identifier').plot(subplots=False)
Run Code Online (Sandbox Code Playgroud)

plt.subplots(3,3)
df.groupby('identifier').plot(subplots=True)
Run Code Online (Sandbox Code Playgroud)

无济于事.我该如何创建图表?

python plot group-by pandas subplot

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

使用来自同一列的平均值填充Pyspark数据帧列空值

使用这样的数据帧,

rdd_2 = sc.parallelize([(0,10,223,"201601"), (0,10,83,"2016032"),(1,20,None,"201602"),(1,20,3003,"201601"), (1,20,None,"201603"), (2,40, 2321,"201601"), (2,30, 10,"201602"),(2,61, None,"201601")])

df_data = sqlContext.createDataFrame(rdd_2, ["id", "type", "cost", "date"])
df_data.show()

+---+----+----+-------+
| id|type|cost|   date|
+---+----+----+-------+
|  0|  10| 223| 201601|
|  0|  10|  83|2016032|
|  1|  20|null| 201602|
|  1|  20|3003| 201601|
|  1|  20|null| 201603|
|  2|  40|2321| 201601|
|  2|  30|  10| 201602|
|  2|  61|null| 201601|
+---+----+----+-------+
Run Code Online (Sandbox Code Playgroud)

我需要用现有值的平均值填充空值,预期结果为

+---+----+----+-------+
| id|type|cost|   date|
+---+----+----+-------+
|  0|  10| 223| 201601|
|  0|  10|  83|2016032|
|  1|  20|1128| 201602|
|  1| …
Run Code Online (Sandbox Code Playgroud)

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

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