我正在尝试按星期在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) 我正在使用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) 我正在将Shapely集成到我的代码中,我必须处理几种不同类型的几何对象.我的大多数需求都满足于Lines,Polygons和LineStrings,但我需要使用省略号.有没有办法通过边界框或半轴形状地创建椭圆,而不必将椭圆离散成线?
干杯!
我.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)
等等...所以我需要帮助来读取文件并使用半颜色字符拆分列中的值;.
我正在尝试使用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.
我正在将一个C++科学应用程序移植到python,因为我是python的新手,我想到了一些问题:
1)我正在定义一个包含坐标(x,y)的类.这些值将被访问多次,但它们只会在类实例化后读取.在内存和访问时间方面使用元组或numpy数组是否更好?
2)在某些情况下,这些坐标将用于构建复数,在复杂函数上进行评估,并将使用此函数的实际部分.假设无法分离此函数的实部和复杂部分,并且最后必须使用实部,可能最好直接使用复数来存储(x,y)?在python中从复杂到真实的转换有多糟糕?c ++中的代码执行了很多这些转换,这在代码中是一个很大的减速.
3)还必须执行一些坐标转换,对于坐标,将分别访问x和y值,转换完成,并返回结果.坐标变换是在复平面中定义的,因此直接使用组件x和y比依赖复杂变量更快?
谢谢
我正在使用新的Jupyter笔记本(neéipythonnotebook),文档表明它从CDN呈现MathJax.我在某些情况下阻止外部连接,因此我需要为所有笔记本配置MathJax的本地副本.我怎么能做到这一点?
使用从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等.
我有一个这样的数据框:
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)
无济于事.我该如何创建图表?
使用这样的数据帧,
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)