Dav*_*vid 11 python csv pandas
我正在读一个基本的csv文件,其中列用逗号分隔,并带有以下列名:
userid, username, body
但是,body列是一个可能包含逗号的字符串.显然这会导致问题,并且大熊猫会抛出错误:
CParserError: Error tokenizing data. C error: Expected 3 fields in line 3, saw 8
有没有办法告诉大熊猫忽略特定列中的逗号或解决此问题的方法?
Fab*_*nna 16
想象一下,我们正在阅读您的数据框comma.csv:
userid, username, body
01, n1, 'string1, string2'
Run Code Online (Sandbox Code Playgroud)
您可以做的一件事是在列中指定字符串的分隔符:
df = pd.read_csv('comma.csv', quotechar="'")
Run Code Online (Sandbox Code Playgroud)
在这种情况下,分隔的字符串'被视为总数,无论它们内部是否有逗号.
将 usecols 和 lineterminator 添加到您的 read_csv() 函数中,其中 n 是您的列的长度。
就我而言:
n = 5 #define yours
df = pd.read_csv(file,
usecols=range(n),
lineterminator='\n',
header=None)
Run Code Online (Sandbox Code Playgroud)
对我来说,上述代码示例都不起作用(我正在 Kaggle 上处理 Netflix 奖数据集),但实际上 pandas 1.3.0+ 版本有一个很酷的功能,它是一个on_bad_lines允许您使用回调函数的参数。这是我所做的:
def manual_separation(bad_line):
right_split = bad_line[:-2] + [",".join(bad_line[-2:])] # All the "bad lines" where all coming from the same last column that was containing ","
return right_split
filename = "netflix_movie_titles.csv"
df = pd.read_csv(
filename,
header=None,
encoding="ISO-8859-1",
names = ['Movie_Id', 'Year', 'Name'],
on_bad_lines=manual_separation,
engine="python",
)
Run Code Online (Sandbox Code Playgroud)
奇迹般有效!您唯一的义务是使用engine=python. 希望有帮助!
| 归档时间: |
|
| 查看次数: |
15982 次 |
| 最近记录: |