dat*_*ict 5 python csv newline pandas pyspark
我有一个包含多个字段的 CSV 文件。数据跨越多行的字段(字符串)很少。我想将这些多行聚合为一行。
输入数据:
1, "asdsdsdsds", "John"
2, "dfdhifdkinf
dfjdfgkdnjgknkdjgndkng
dkfdkjfnjdnf", "Roy"
3, "dfjfdkgjfgn", "Rahul"
Run Code Online (Sandbox Code Playgroud)
预期输出:
1, "asdsdsdsds", "John"
2, "dfdhifdkinf dfjdfgkdnjgknkdjgndkng dkfdkjfnjdnf", "Roy"
3, "dfjfdkgjfgn", "Rahul"
Run Code Online (Sandbox Code Playgroud)
早些时候在SO 中提出了同样的问题。然而,解决方案是使用 power shell 实现的。是否可以使用 python、pandas 或 pyspark 实现相同的目标。
每当数据跨越多行时,它肯定会用双引号引起来。
我试过的
我可以使用 Pandas 和 pyspark 读取数据而不会出现任何问题,即使有些字段跨越了多行。
熊猫:
pandas_df = pd.read_csv("file.csv")
Run Code Online (Sandbox Code Playgroud)
火花
df = sqlContext.read.format('com.databricks.spark.csv').options(header='true', inferschema='true') \
.option("delimiter", ",").option("escape", '\\').option("escape", ':').\
option("parserLib", "univocity").option("multiLine", "true").load("file.csv")
Run Code Online (Sandbox Code Playgroud)
编辑:
csv 文件中可以有 n 个字段,并且此数据跨度可以在任何字段中。
def weird_gen(s):
s = [s]
while s:
*x, a = s[0].split(',', 2)
y, *s = a.split('\n', 1)
yield ', '.join(z.strip().replace('\n', ' ') for z in x + [y])
print('\n'.join(weird_gen(open('bad.csv').read())))
1, "asdsdsdsds", "John"
2, "dfdhifdkinf dfjdfgkdnjgknkdjgndkng dkfdkjfnjdnf", "Roy"
3, "dfjfdkgjfgn", "Rahul"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2874 次 |
| 最近记录: |