Python - Pandas Dataframe 在导入时忽略 \

Posted

技术标签:

【中文标题】Python - Pandas Dataframe 在导入时忽略 \\【英文标题】:Python - Pandas Dataframe ignore \ when importingPython - Pandas Dataframe 在导入时忽略 \ 【发布时间】:2018-10-11 23:22:03 【问题描述】:

我正在尝试使用 pandas 数据框将一个非常大的 CSV 文件(超过 25M 行)导入 python。

数据框具有以下列: - dest_profile - 名 - 姓 - ID - 骗局 - 公司名称

有时,company_name 中有一个“\”(例如:HPE\HPI),它会导致导入错误。我已将 error_bad_lines=False 添加到我的 pd.read_csv 代码中。但是,我也想导入这些行。

如何在 company_name 列中跳过 \?

import pandas as pd
import numpy as np
df_1st_conns = pd.read_csv("D:\Downloads\LinkedIn\DataV2\1st_degree_nbrs.csv", error_bad_lines=False)

它认为 \ 是列分隔符。这是错误消息。

b'Skipping line 22813: expected 6 fields, saw 7\nSkipping line 62807: expected 6 fields, saw 7\n'
b'Skipping line 152688: expected 6 fields, saw 7\nSkipping line 170013: expected 6 fields, saw 7\nSkipping line 222565: expected 6 fields, saw 7\nSkipping line 222644: expected 6 fields, saw 7\nSkipping line 240790: expected 6 fields, saw 7\n'

【问题讨论】:

你试过pd.read_csv(path, error_bad_lines=False, lineterminator='\n')吗? 是的,我试过 lineterminator='\n' 但仍然遇到同样的问题。 【参考方案1】:

也许您可以创建一个新文件,将所有反斜杠替换为空字符串 "" 或其他替换字符。

一个例子 sn-p:

input_csv_filename = "original.csv"
output_csv_filename = "no_backslashes.csv"

# Read original contents
with open(input_csv_filename, 'rb') as f:
    csv_contents = f.read()

# Replace backslash with empty string
# b'\\' is the bytes literal for b'\'
csv_contents = csv_contents.replace(b'\\', b'')

# Write replaced contents to the output csv file
with open(output_csv_filename, 'wb') as f:
    f.write(csv_contents)

然后您可以使用您的代码继续读取输出的 csv 文件:

import pandas as pd

df = pd.read_csv(output_csv_filename)

编辑 - 1:请注意,这将不加选择地替换原始 csv 文件中的所有反斜杠。如果您确信其他任何地方都不会出现反斜杠,那么您可以使用这种方法。

编辑 - 2:我的错,我最初认为该文件不会包含 unicode 字符。我已通过代码更改为现在处理bytes 中的文件。

【讨论】:

我尝试过但遇到以下错误:UnicodeEncodeError Traceback (最近一次调用最后一次) in () ----> 7 f. write(csv_contents) 17 类 IncrementalEncoder(codecs.IncrementalEncoder): 18 def encode(self, input, final=False): ---> 19 return codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError: ' charmap' 编解码器无法对位置 23755 中的字符 '\u0130' 进行编码:字符映射到 我更新了代码,现在可以处理 unocde 字符。你现在可以试试吗?再次警告,这将替换它在文件中找到的任何反斜杠。 很抱歉延迟返回 Nitred。是的,它有帮助。非常感谢您的帮助。

以上是关于Python - Pandas Dataframe 在导入时忽略 \的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas -- DataFrame

Python pandas DataFrame的切片取值

利用Python进行数据分析:Pandas(Series+DataFrame)

python: pandas.DataFrame,如何避免keyerror?

小白学 Python 数据分析:Pandas 数据结构 DataFrame

Python数据分析pandas之dataframe初识