【问题标题】:Split a koalas column of lists into multiple columns将一个考拉列表拆分为多列
【发布时间】:2022-01-18 12:12:21
【问题描述】:

我如何从 df 转到 df1,其中 df 和 df1 如下所示?

df = koalas.DataFrame({"teams": [["SF", "NYG"] for _ in range(7)],'teams1':[np.random.randint(0,10) for _ in range(7)]})
df
output:
    teams   teams1
0   [SF, NYG]   0
1   [SF, NYG]   5
2   [SF, NYG]   8
3   [SF, NYG]   1
4   [SF, NYG]   2
5   [SF, NYG]   8
6   [SF, NYG]   5
df1 = koalas.DataFrame({"col1": ["SF" for _ in range(7)],\
                        "col2": ["NYG" for _ in range(7)],\
                        'teams1':[np.random.randint(0,10) for _ in range(7)]})
df1
output:
    col1 col2 teams1
0   SF  NYG 8
1   SF  NYG 2
2   SF  NYG 9
3   SF  NYG 4
4   SF  NYG 8
5   SF  NYG 3
6   SF  NYG 1

我可以看到 pandas here 的解决方案。但是这个解决方案将收集驱动程序端的所有数据,这不是我想要发生的。我想要一个考拉(pyspark 上的熊猫)解决方案

【问题讨论】:

  • this 可能会有所帮助。
  • 在 pyspark 中要容易得多——你真的想要考拉解决方案吗? pyspark - new_sdf = kdf.to_spark().withColumn('col1', sdf.teams[0]).withColumn('col2', sdf.teams[1])
  • 是的,你是对的。我正在艰难地学习它,因为我现在可以从 pyspark 导入 pandas,所以我无法将我的 pandas 知识免费转移到 pyspark。 pyspark 上的 pandas 有太多的陷阱,而 pyspark API 对于所有用例来说会更容易。还在学习:)

标签: python apache-spark pyspark spark-koalas


【解决方案1】:

我发现只使用对工作人员进行操作而不将所有数据收集到驱动程序的函数的一种方法是

df['teams'] \
  .astype(str) \
  .str.replace('\[|\]', '') \
  .str.split(pat=',', n=1, expand=True)

#     0     1
# 0  SF   NYG
# 1  SF   NYG
# 2  SF   NYG
# 3  SF   NYG
# 4  SF   NYG
# 5  SF   NYG
# 6  SF   NYG

我不得不将列转换为 string 类型,因为它是一个 numpy 数组,pyspark 无法对其进行操作。


要沿其他列获取初始数据框,您可以使用简单的concat

import databricks.koalas as ks

ks.concat([
  df['teams'].astype(str).str.replace('\[|\]', '').str.split(pat=',', n=1, expand=True),
  df.drop(columns='teams')
], axis=1)

#     0     1  teams1
# 0  SF   NYG       2
# 1  SF   NYG       2
# 2  SF   NYG       1
# 3  SF   NYG       1
# 4  SF   NYG       7
# 5  SF   NYG       8
# 6  SF   NYG       6

【讨论】:

  • 是的,这行得通!谢谢!
猜你喜欢
  • 2018-11-25
  • 1970-01-01
  • 2011-05-05
  • 2019-06-05
  • 2013-01-23
相关资源
最近更新 更多