python pandas中使用read_csv忽略回车(\u000D)

b1zrtrql  于 5个月前  发布在  Python
关注(0)|答案(1)|浏览(70)

我定期收到一个包含100多列和数百万行的CSV文件。这些CSV文件总是包含特定的列集Core_cols = [col_1, col_2, col_3]和可变数量的其他列,Var_col = [a, b, c, d, e]。核心列始终在那里,可能有0- 200个变量列。有时变量列中的一列会包含回车。我知道哪些列会发生这种情况,bad_cols = [a, b, c]
当用pd.read_csv导入csv时,这些回车符会在生成的嵌套框中产生损坏的行。如果没有这些列,我无法重新生成csv。
我如何要么:
1.忽略这些列和包含在?或
1.在csv中用空格替换回车符?
我现在的代码看起来像这样:

df = pd.read_csv(data.csv, dtype=str)

字符串
我尝试过在导入后删除列之类的方法,但损坏似乎已经在这一点上完成了。我现在找不到代码,但在测试一个修复程序时,错误显示类似于“数据中的无效字符u000D”。我不控制数据的来源,因此无法对其进行编辑。

eiee3dmh

eiee3dmh1#

Pandas支持多行CSV文件如果文件被正确转义和引用。如果你不能使用pandas或csv模块在Python中读取CSV文件,也不能在Excel中打开它,那么它可能是一个格式错误的“CSV”文件。
可以逐行处理CSV文件并使用一些自定义代码解析字段,或者需要修复CSV文件以使其成为有效的CSV格式文件。这意味着带有双引号(“)的值或新行将用双引号(“)引起来,嵌入的引号将被转义(“”)。
对于任何一种方法,都需要首先隔离导致问题的行,然后创建一个包含其中一些行和一些正常行的小型示例CSV文件,以制定出适用于好行和坏行的解决方案。
建议手动编辑CSV文件的示例并使其工作,以便它可以使用Excel和Pandas打开。然后重新创建步骤,以在Python中以编程方式将其规范化,以处理大文件。
使用此代码创建一个示例CSV文件,将前100行复制到新文件中。

with open('bigfile.csv', "r") as csvin, open('test.csv', "w") as csvout:
    line = csvin.readline()
    count = 0
    while line and count < 100:
        csvout.write(line)
        count += 1
        line = csvin.readline()

字符串
现在你有一个小的测试文件。如果原始CSV文件有数百万行,并且在文件中很晚才发现“坏”行,那么你需要添加一些逻辑来找到“坏”行。例如,如果“\n”出现在列“A”的值中。
例如,如果pandas在第123456行失败,那么可以尝试这样的方法来捕获前100行和第123456行的行,其中row before and after。

with open('bigfile.csv', "r") as csvin, open('test.csv', "w") as csvout:
    for idx, line in enumerate(csvin):
        if idx < 100:
            csvout.write(line)        
        elif idx in [123455, 123456, 123457]:
            csvout.write(line)
            if idx == 123457:
                break

相关问题