Python 读取带有双引号元素和引号行的 CSV

标签 python pandas csv

所以我有这样的 csv 数据:

1, 2, 3, bla bla bla, 4, 5;
"1, 2, 3, ""bla, bla, bla"", 4, 5";
"6, 7, 8, ""more, bla, bla"", 9, 10";
6, 7, 8, more bla bla, 9, 10;

本质上:某一列有一个带有分隔符的字符串,它用双引号引起来,而整行也用引号引起来。

我已经用 pandas 试过了:

df = pd.read_csv("data.csv", sep=',', skipinitialspace=True, quotechar='"', doublequote=True)

但是因为有些行是用引号引起来的,所以它把它放到了第一列:

column1                        column12    column13    column14    column15    column16
1                              2           3         bla bla bla   4           5
1,2,3,"bla, bla, bla", 4, 5    nan         nan         nan         nan         nan
6,7,8,"more, bla, bla",9,10    nan         nan         nan         nan         nan
6                              7           8         more bla bla  9           10

我如何让这些引用的行相应地采取行动?

最佳答案

一种方法是在将其加载到 Pandas 之前对其进行预处理:

import csv
import pandas as pd
import io

data = []

with open('input.csv') as f_input:
    for line in f_input:
        line = line.strip('";\n').replace('""', '"')
        row = next(csv.reader(io.StringIO(line, newline=''), skipinitialspace=True))
        data.append(row)

df = pd.DataFrame(data)
print(df)

给予:

   0  1  2               3  4   5
0  1  2  3     bla bla bla  4   5
1  1  2  3   bla, bla, bla  4   5
2  6  7  8  more, bla, bla  9  10
3  6  7  8    more bla bla  9  10

或者你可以写出固定版本供以后使用:

with open('output.csv', 'w', newline='') as f_output:
    csv.writer(f_output).writerows(data)

关于Python 读取带有双引号元素和引号行的 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66731106/

相关文章:

python - 如何按 Pandas 中的分层列分组?

ios - 无法打开该文件,因为您没有查看它的权限(真实设备)

使用 15000 行数据集查找最小列值的 Python 代码

Python:如何打印字节?

python - 在模拟上设置属性不起作用

python - 获取行匹配条件的 Pandas DataFrame 中的第一列值

python - 从文件创建句子列表并将其添加到数据框中

python - 比较两个数据帧并获得差异

python - 如何在字符级别对句子矩阵进行单热编码?

json - 将 JSON 转换为 CSV - 字符串操作(jq、bash、awk、sed 等)