忽略回车 returns (u1000D) with read_csv in python pandas
Ignore carriage returns (u1000D) with read_csv in python pandas
我经常收到定期发送的包含 100 多列和数百万行的 csv。这些 csv 文件总是包含特定的一组列,Core_cols = [col_1, col_2, col_3]
,以及可变数量的其他列,Var_col = [a, b, c, d, e]
。核心列始终存在,并且可能有 0-200 个可变列。有时变量列中的其中一列会包含回车return。我知道这可能发生在哪些列中,bad_cols = [a, b, c]
。
当使用 pd.read_csv 导入 csv 时,这些回车符 return 会在结果数据框中造成损坏的行。没有这些列,我无法重新制作 csv。
我该怎么做:
- 忽略这些列和其中包含的回车return?或
- 将 csv 中的回车 return 替换为空格?
我当前的代码如下所示:
df = pd.read_csv(data.csv, dtype=str)
我尝试过导入后删除列之类的操作,但此时损坏似乎已经完成。我现在找不到代码,但是在测试一个修复程序时,错误显示类似“数据中的无效字符 u000D
”。我无法控制数据源,因此无法对其进行编辑。
Pandas 支持多行 CSV 文件如果文件被正确转义和引用。如果您无法使用 pandas 或 csv 模块在 Python 中读取 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 文件有数百万行,并且在文件中很晚才发现“坏”行,那么您需要添加一些逻辑来查找“坏”行。
我经常收到定期发送的包含 100 多列和数百万行的 csv。这些 csv 文件总是包含特定的一组列,Core_cols = [col_1, col_2, col_3]
,以及可变数量的其他列,Var_col = [a, b, c, d, e]
。核心列始终存在,并且可能有 0-200 个可变列。有时变量列中的其中一列会包含回车return。我知道这可能发生在哪些列中,bad_cols = [a, b, c]
。
当使用 pd.read_csv 导入 csv 时,这些回车符 return 会在结果数据框中造成损坏的行。没有这些列,我无法重新制作 csv。
我该怎么做:
- 忽略这些列和其中包含的回车return?或
- 将 csv 中的回车 return 替换为空格?
我当前的代码如下所示:
df = pd.read_csv(data.csv, dtype=str)
我尝试过导入后删除列之类的操作,但此时损坏似乎已经完成。我现在找不到代码,但是在测试一个修复程序时,错误显示类似“数据中的无效字符 u000D
”。我无法控制数据源,因此无法对其进行编辑。
Pandas 支持多行 CSV 文件如果文件被正确转义和引用。如果您无法使用 pandas 或 csv 模块在 Python 中读取 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 文件有数百万行,并且在文件中很晚才发现“坏”行,那么您需要添加一些逻辑来查找“坏”行。