小编Ali*_*AzG的帖子

如何将 UDF 中的结构或类数组返回到数据帧列值中?

d = [{'ID': '1', 'pID': 1000, 'startTime':'2018.07.02T03:34:20', 'endTime':'2018.07.03T02:40:20'}, {'ID': '1', 'pID': 1000, 'startTime':'2018.07.02T03:45:20', 'endTime':'2018.07.03T02:50:20'}, {'ID': '2', 'pID': 2000, 'startTime':'2018.07.02T03:34:20', 'endTime':'2018.07.03T02:40:20'}, {'ID': '2', 'pID': 2000, 'startTime':'2018.07.02T03:45:20', 'endTime':'2018.07.03T02:50:20'}]

df = spark.createDataFrame(d)

Dates = namedtuple("Dates", "startTime endTime")


def MergeAdjacentUsage(timeSets):
  DatesArray = []
  for times in timeSets:
    DatesArray.append(Dates(startTime=times.startTime, endTime=times.endTime))
  return DatesArray


MergeAdjacentUsages = udf(MergeAdjacentUsage,ArrayType(Dates()))

df1=df.groupBy(['ID','pID']).agg(MergeAdjacentUsages(F.collect_list(struct('startTime','endTime'))).alias("Times"))

display(df1)
Run Code Online (Sandbox Code Playgroud)

我想要的只是将列值设置为 UDF 返回的结构数组。它给我的错误是:

类型错误:new () 恰好需要 3 个参数(给定 1 个)

() 22 return DatesArray 23 ---> 24 MergeAdjacentUsages = udf(MergeAdjacentUsage,ArrayType(Dates())) 25 26 df1=df.groupBy(['ID','pID'] 中的 TypeError Traceback (最近一次调用最后一次) …

arrays struct user-defined-functions dataframe pyspark

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

如何从散点图图例中删除属性

plot我使用seaborn三列进行了分散['Category','Installs' and 'Gross Income'],并使用数据集中的类别列进行了色调图。然而,在图例中,除了我想要出现的类别列之外,最后还有一个大自以为是的内容,显示了散点图中使用的列之一,安装。我想删除这个元素,但是通过搜索其他问题和文档seabornmatplotlib我不知道如何继续。

这是我正在使用的代码片段:

fig, ax = pyplot.subplots(figsize=(12,6))

ax=sns.scatterplot( x="Installs", y="Gross Income", data=comp_income_inst, hue='Category', 
                   palette=sns.color_palette("cubehelix",len(comp_income_inst)), 
                   size='Installs', sizes=(100,5000), legend='brief', ax=ax) 

ax.set(xscale="log", yscale="log")
ax.set(ylabel="Average Income") 
ax.set_title("Distribution showing the Earnings of Apps in Various Categories\n", fontsize=18)
plt.rcParams["axes.labelsize"] = 15



# Move the legend to an empty part of the plot
plt.legend(loc='upper left', bbox_to_anchor=(-0.2, -0.06),fancybox=True, shadow=True, ncol=5)
#plt.legend(loc='upper left')

plt.show()
Run Code Online (Sandbox Code Playgroud)

这是上面代码的结果,注意右下角Legend中的洋洋得意

python matplotlib scatter-plot seaborn

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

如何使用 matplotlib 绘制具有 2 个特征的 3D 多重线性回归?

我需要使用 matplotlib 中的 2 个特征绘制具有多个线性回归的 3D 图。我怎样才能做到这一点?

这是我的代码:

import pandas
from sklearn import linear_model

df = pandas.read_csv("cars.csv")

X = df[['Weight', 'Volume']]
y = df['CO2']

regr = linear_model.LinearRegression()

predictedCO2 = regr.predict([scaled[0]])
print(predictedCO2)
Run Code Online (Sandbox Code Playgroud)

python matplotlib mplot3d

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

使用切片将字符串拆分为单个字符

我很困惑以下 python 代码如何使用b[:0] = a. 不应该只是b = ['abc']吗?

a='abc'
b=[]
b[:0]=a
print(b)
Run Code Online (Sandbox Code Playgroud)

输出:

b=[a,b,c]
Run Code Online (Sandbox Code Playgroud)

python string split

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

在pyspark中,如何将字符串添加/合并到列中?

我想将字符串添加到现有列。例如,df['col1']具有等值'1', '2', '3',我想'000'在其左侧合并字符串,col1因此我可以将列(新列或替换旧列都无所谓)'0001', '0002', '0003'

我以为我应该使用,df.withColumn('col1', '000'+df['col1'])但由于pyspark dataframe是不可变的,因此当然不起作用?

这应该是一个简单的任务,但是我没有在网上找到任何东西。希望有人能给我一些帮助!

谢谢!

apache-spark-sql pyspark

4
推荐指数
2
解决办法
7828
查看次数

如何从pyspark中删除数据帧来管理内存?

我列出了我的数据帧以删除未使用的数据帧。首先,我使用下面的函数来列出我从其中一篇文章中找到的数据帧

from pyspark.sql import DataFrame

def list_dataframes():

    return [k for (k, v) in globals().items() if isinstance(v, DataFrame)] 
Run Code Online (Sandbox Code Playgroud)

然后我尝试从列表中删除未使用的。我在下面使用的代码

df2.unpersist()
Run Code Online (Sandbox Code Playgroud)

当我再次列出时,df2 仍然存在。如何删除数据帧以在 pyspark 上获得一些内存?或者你有其他建议吗?谢谢你。

python memory apache-spark pyspark

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

熊猫:绘制箱内的平均值 - 需要格式化帮助

我正在做一些太阳系动力学模拟,并一直以这个项目为借口自学一些 python/pandas。生成的数据集有 1000 多条记录,其中包含每个相关天体的轨道倾角、偏心率等值。

我正在尝试使用熊猫来研究结果数据中 ~1000 个物体(“测试粒子”)的平均轨道倾角,作为半长轴的函数。

到目前为止,我一直在做的是:

1) 将数据读入数据帧

df = pd.read_csv('final.csv')
Run Code Online (Sandbox Code Playgroud)

2) 将数据限制在一系列半长轴值(粒子在模拟过程中“扩散”,但我想限制我的分析

cf = df[df.a.between(30,80)]
Run Code Online (Sandbox Code Playgroud)

3) 绘制给定数量的 bin 的倾角平均值

cf.groupby(pd.cut(cf.a, 80))['inc'].mean().plot()
Run Code Online (Sandbox Code Playgroud)

这创建了一个可接受的绘图,但在格式方面它有几个问题:除非它完全最大化以填满我的屏幕,否则沿 x 轴的数字会被挤压在一起并重叠。它们也不完全是我想看到的:它们显示了垃圾箱的最大值和最小值,我更喜欢直接滴答 5 秒或类似的东西。

上面命令的熊猫输出

我试过将值传递(x=None, xticks=None)plot()上面的字符串部分,但这对结果图没有影响。我这样做的方式是否可以控制绘图/输出?

谢谢,

G

python plot matplotlib bins pandas

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

删除Python列表中的相邻重复项

我将字符串转换a为列表,我希望循环创建 \xe2\x80\x8dtabb = ['a', 'b', 'c', 'a']

\n\n
a = aaabbbbcccaaa\n\ntaba = list(a)\ntabb = []\n\nfor i in taba:\n    for j in range(len(tabb)):\n        if not i[j] == i[j-1]:\n            tabb.append(i[j])\n\nprint (tabb)\n
Run Code Online (Sandbox Code Playgroud)\n\n

但显然我的解决方案gives tabb = []

\n\n

您有更好、更简单的想法来让它发挥作用吗?

\n

python element list python-3.x

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

按matplotlib中的列表值对条形图进行排序

我遇到了一个关于按价值对我的特征进行排序的问题。我想看到我的图像,根据它们在 y 轴上的高度,条形变短。不幸的是,我的条形图看起来像这样,功能按字母顺序排序:

在此处输入图片说明

现在我正在运行以下代码:

unsorted_list = [(importance, feature) for feature, importance in 
                  zip(features, importances)]
sorted_list = sorted(unsorted_list)

features_sorted = []
importance_sorted = []

for i in sorted_list:
    features_sorted += [i[1]]
    importance_sorted += [i[0]]

plt.title("Feature importance", fontsize=15)
plt.xlabel("Importance", fontsize=13)

plt.barh(features_sorted,importance_sorted, color="green", edgecolor='green')

# plt.savefig('importance_barh.png', dpi=100)
Run Code Online (Sandbox Code Playgroud)

这是通过那里的数据:

unsorted_list =  
 [('HR', 0.28804817462980353),
 ('BR', 0.04062328177704225),
 ('Posture', 0.09011618483921582),
 ('Activity', 0.0017821837085763366),
 ('PeakAccel', 0.002649111136700579),
 ('HRV', 0.13598729040097057),
 ('ROGState', 0.014534726412631642),
 ('ROGTime', 0.22986192060475388),
 ('VerticalMin', 0.016099772399198357),
 ('VerticalPeak', 0.012697214182994502),
 ('LateralMin', 0.029479112475744584),
 ('LateralPeak', 0.022745210003295983),
 ('SagittalMin', 0.08653071485979484),
 ('SagittalPeak', 0.028845102569277088)]

sorted_list = 
[(0.0017821837085763366, 'Activity'),
 (0.002649111136700579, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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

如何修复 TypeError:只能将 str(不是“列表”)连接到 str

我正在尝试从 python 速成课程中学习 python,但是这一项任务让我很难过,我在任何地方都找不到答案

任务是想想你最喜欢的交通方式,并制作一个列表,其中存储了几个例子 使用你的列表打印关于这些项目的一系列陈述

cars = ['rav4'], ['td5'], ['yaris'], ['land rover tdi'] 

print("I like the "+cars[0]+" ...")
Run Code Online (Sandbox Code Playgroud)

我假设这是因为我将字母和数字放在一起,但我不知道如何在没有错误的情况下产生结果,并且将不胜感激地收到帮助我得到的错误是

类型错误:只能将 str(不是“列表”)连接到 str**

python typeerror

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

找不到满足要求zipfile的版本(来自版本:)

我使用pip install zipfile,错误消失了:

找不到满足要求zipfile的版本(来自版本:)找不到与zipfile匹配的发行版

附加信息:来自/Users/xxxx/Library/Python/2.7/lib/python/site-packages/pip(python 2.7)的pip 18.1

python pip zipfile

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

如何克服“DataFrame”对象在 Python 的 Pandas 中没有属性“excelwriter”

我已经优化了一个现有xlsx文件,并希望根据内容创建三个新文件。成功获得三个新输出,但无法将其写入新xlsx文件。

我尝试安装,excelwriter但这并没有解决我的问题。

import pandas as pd
import xlsxwriter

xl_file = pd.ExcelFile('C:\\Users\\python_codes\\myfile.xlsx')

dfs = pd.read_excel('myfile.xlsx', sheetname="Sheet1")
test = dfs.drop_duplicates(subset='DetectionId', keep='first', inplace=False)

dfs2 = test[test['list_set_id'] == 1]
print(dfs2)

writer = dfs2.ExcelWriter('newfile.xlxs', engine='xlsxwriter')

df.to_excel(writer, sheet_name='Sheet1')
writer.save()
Run Code Online (Sandbox Code Playgroud)

我想xlsx用现有文件中过滤后的内容编写新文件。

python pandas pandas.excelwriter

-3
推荐指数
1
解决办法
5462
查看次数