提取特定单元格的值并将其填充以代替 pyspark 数据框中的 NA 值

Posted

技术标签:

【中文标题】提取特定单元格的值并将其填充以代替 pyspark 数据框中的 NA 值【英文标题】:Extracting value of specific cell and populating it in place of NA values in pyspark dataframe 【发布时间】:2020-12-15 11:11:28 【问题描述】:

我正在将 python 代码转换为 pyspark,在这里我尝试使用 fillna 并使用来自同一数据框的另一列但在索引 0 上的值填充 na 值

下面是我的正常工作的python代码:

df['Parent'].fillna(df.at[0, 'Sequence'], inplace=True) 

之前的dataframe结构:

df:
A       B       Sequence    Parent
QQQ     AAA     0251
WWW     SSS     0616            
EEE     DDD     0720            0616
RRR     FFF     0807            0720

dataframe 之后的结构:

df:
A       B       Sequence    Parent
QQQ     AAA     0251            0251
WWW     SSS     0616            0251
EEE     DDD     0720            0616
RRR     FFF     0807            0720

我尝试了以下方法:

df.collect()[0]['Sequence'] # This gives different value each time.
df.fillna(df.select("Sequence")[0], subset=['Parent']) # Syntax is not correct

欢迎提出任何建议。

【问题讨论】:

【参考方案1】:

您可以使用 collect 方法执行此操作,但要过滤以获取您想要的值:

value = df.filter(df["A"] == "QQQ").collect()[0]['Sequence']
df = df.fillna(value, ["Parent"])

【讨论】:

数据框中列的内容是可变的,因此它们不能用于查询。还有其他方法吗? 您只需要文件的第一行。如果文件是 .csv,您可以直接读取第一行并获取值。另一种选择是将您的熊猫数据帧直接转换为火花数据帧或尝试在火花中限制,但我不知道它是否保留数据帧顺序。【参考方案2】:

我假设您想使用序列的最小值来填充。请注意,Spark 没有索引的概念,所以像 at index 0 这样的说法是未定义的。您需要定义数据框的顺序,以便索引的概念有意义。

import pyspark.sql.functions as F

df2 = df.fillna(df.select(F.min("Sequence")).collect()[0][0], subset=['Parent'])

【讨论】:

以上是关于提取特定单元格的值并将其填充以代替 pyspark 数据框中的 NA 值的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA/Formula 用于根据 2 个其他单元格的值填充 3 个特定单元格

如何获取单个表格行日期索引属性索引,以便我可以提取其单元格的值?

在谷歌表格中提取特定单元格的公式

通过在一个单元格中输入公式来填充不同单元格的数组公式

如何填充自定义单元格的 UIPickerView

根据另一个单元格的值自动填充单元格,不带公式