首页 > 解决方案 > 如何读取带有 € 和 % 符号的 csv 文件

问题描述

我正在读取一个 csv 文件并创建一个 pyspark 数据框。TrueValue 和 PickoutValue 列包含“€”和“%”符号。阅读后,我将€符号作为“�”。

Month       TrueValue           PickoutValue
1/1/2021    4728                52500
1/1/2021    4313                0
2/1/2021    3101                2500
2/1/2021    0                   0
3/1/2021    6.90%               6.60%
2/1/2021    75.60%              70.00%
3/1/2021    � 373,020,387.05    � 223,885,862.89

我需要通过除 ((TrueValue/PickoutValue)*100) 创建一个新列“ResultValue” 这是我尝试过的

df_src=spark.read.csv(src_path, header=True, encoding='ISO-8859-1')
df=df.select('Month', \
        'TrueValue',F.translate(F.col('TrueValue'),"%\u20ac� ","").alias('TrueValueReplaced') \
        'PickoutValue',F.translate(F.col('PickoutValue'),"%\u20ac� ","").alias('PickoutValueReplaced')) \
        .withColumn('ResultValue', (col('TrueValueReplaced')/col('PickoutValueReplaced')*100)) \
                  .drop('TrueValueReplaced').drop('PickoutValueReplaced')

但是,这并没有替换 � 符号,我也没有得到所需的数据帧。任何其他方法请建议..

Month       TrueValue           PickoutValue        TrueValueReplaced       PickoutValueReplaced        ResultValue
1/1/2021    4728                52500               4728                    52500                       9.005714285714287
1/1/2021    4313                0                   4313                    0                           null    
2/1/2021    3101                2500                3101                    2500                        124.03999999999999
2/1/2021    0                   0                   0                       0                           null
3/1/2021    6.90%               6.60%               6.90                    6.60                        104.54545454545456
2/1/2021    75.60%              70.00%              75.60                   70.00                       107.99999999999999
3/1/2021     373,020,387.05  223,885,862.89  373,020,387.05      223,885,862.89         null

标签: pythonapache-sparkpyspark

解决方案


推荐阅读