Python 3 函数循环遍历 pandas 数据框以更改模式

Posted

技术标签:

【中文标题】Python 3 函数循环遍历 pandas 数据框以更改模式【英文标题】:Python 3 function to loop over pandas data frame to change schema 【发布时间】:2020-02-24 18:48:04 【问题描述】:

我正在将一堆 pandas 数据帧转换为 spark df,然后写入 hdfs。还明确指定架构以将所有数据类型更改为字符串以避免合并类冲突。

尝试编写一个循环遍历所有 pandas df 列的函数,创建架构然后我可以使用架构转换为 spark。

这是我目前所拥有的:

def creating_schema(df):
    for columnName in df.columns:
        schema = StructType([(StructField('"' + columnName + '"' , StringType(), True))])
        print(schema)

    return(schema)

这个输出:

StructType(List(StructField("column_1",StringType,true)))
StructType(List(StructField("column_2",StringType,true)))
StructType(List(StructField("column_3",StringType,true)))
StructType(List(StructField("column_4",StringType,true)))
StructType(List(StructField("column_5",StringType,true)))

但是,我相信我需要这种格式的东西才能让它工作:

schema = StructType([StructField("column_1" , StringType(), True),
                    StructField("column_2" , StringType(), True),
                    StructField("column_3" , StringType(), True),
                    StructField("column_4" , StringType(), True),
                    StructField("column_5" , StringType(), True)
                    ])

编写此函数的任何帮助都会有所帮助!

谢谢!

【问题讨论】:

【参考方案1】:

试试:

def creating_schema(df):
    sf = []
    for columnName in df.columns:
        sf.append(StructField(columnName, StringType(), True))
    return StructType(sf)

证明:

pdf = pd.DataFrame(columns=["column_1","column_2","column_3","column_4","column_5"])
schema=creating_schema(pdf)
sdf = sqlContext.createDataFrame(sc.emptyRDD(), schema)
sdf.printSchema()
root
 |-- column_1: string (nullable = true)
 |-- column_2: string (nullable = true)
 |-- column_3: string (nullable = true)
 |-- column_4: string (nullable = true)
 |-- column_5: string (nullable = true)

【讨论】:

您可能会考虑将StructField('"' + columnName + '"' , StringType(), True) 更改为StructField(columnName, StringType(), True)。我认为引用一个字符串是没有必要的。

以上是关于Python 3 函数循环遍历 pandas 数据框以更改模式的主要内容,如果未能解决你的问题,请参考以下文章

Python / Pandas:循环遍历数字列表

循环遍历多个 panda 数据帧以在 Python 中获取多个数据帧输出

Python-循环遍历pandas Groupby对象

python--pandas分组聚合

循环遍历excel文件做一些事情并将它们保存到新文件夹python pandas

循环遍历 df 字典以合并 Pandas 中的 df