删除列中不一致的空格

时间:2020-03-13 16:18:32

标签: python dataframe pyspark

我必须读取一个空格不一致的文件作为列定界符。我如何使用Python阅读任何建议。最终,我需要将此数据保存在pyspark数据框中。

文件内容如下:

AutoID               AutoGUID                             ServerID         ReceivedUTC
244021856            B22AD225-1373-4F13-9ADE-38963BA67835 GOEQXPWEPO020    2019-11-02 13:57:25.973

3 个答案:

答案 0 :(得分:0)

如该链接How to change tab delimited in to comma delimited in pandas中所述 您可以将定界符更改为“无”或更改为熊猫中的特定字符 像:

pd.read_csv(filename,sep=None)  

file = pd.read_csv(filename, sep="\t")

随时检查文档,因为它可能会给您一些提示https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

答案 1 :(得分:0)

此文件格式称为固定宽度文件。 pandas具有专门用于读取此类文件的功能:read_fwf

默认情况下,pandas将推断每列的宽度。如果发现这样做有麻烦,可以研究colspecs可选参数。

您可以使用以下方法将生成的pandas.DataFrame转换为pyspark DataFrame:

spark.createDataFrame(pandas_df)

documented by pyspark

答案 2 :(得分:0)

Python 中,我们可以使用正则表达式 split ,我们根据不一致的空间拆分数据。

import re
re.split("\\s+",'a b   c')
['a', 'b', 'c']

In Pyspark:

#sample data
$ cat i.txt
one two   three   four   five
six    seven    eight nine ten

cols=["col1","col2","col3","col4","col5"]
spark.sparkContext.textFile("<file_path>/i.txt").map(lambda x:re.split("\\s+",x)).toDF(cols).show()

#creating dataframe on the file with inconsistent spaces.
#+----+-----+-----+----+----+
#|col1| col2| col3|col4|col5|
#+----+-----+-----+----+----+
#| one|  two|three|four|five|
#| six|seven|eight|nine| ten|
#+----+-----+-----+----+----+