我经常收到一个包含100多列和数百万行的csv文件。这些csv文件总是包含一定数量的列Core_cols = [col_1, col_2, col_3]
和可变数量的其他列Var_col = [a, b, c, d, e]
。核心列总是在那里,可以有0-200个变量列。有时,变量columns中的某一列将包含回车。我知道这可能发生在哪个列,bad_cols = [a, b, c]
。
导入csv时使用pd。这些回车会在结果数据帧中生成损坏的行。如果没有这些列,我无法重新生成csv。
我如何:
- 忽略这些列和其中包含的回车符?或
- 在csv?
我当前的代码看起来像这样:
df = pd.read_csv(data.csv, dtype=str)
我尝试过在导入后删除列之类的事情,但此时损害似乎已经造成。我现在找不到代码,但是当测试一个修复错误时说类似于"无效字符u000D
在数据"。我不能控制数据的来源,所以不能对其进行编辑。
Pandas支持多行CSV文件,如果文件被正确转义并加引号。如果你不能在Python中使用pandas或CSV模块读取CSV文件,也不能在MS Excel中打开它,那么它可能是一个不兼容的"CSV"文件。文件。
建议手动编辑CSV文件的示例并使其工作,以便可以使用Excel打开。然后在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文件有数百万行并且"bad"行在文件中很晚才被发现,然后您需要添加一些逻辑来查找"坏"行。行。