首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在阅读熊猫csv文件时如何处理引号

问在阅读熊猫csv文件时如何处理引号
EN

Stack Overflow用户
提问于 2021-08-21 03:00:21
回答 5查看 218关注 0票数 0

我正试着把CSV文件读入熊猫DataFrame。我在CSV上的一行上有数据模式,如下所示

代码语言:javascript
复制
a,b,\\"c\\,d",e,f,g,h  --> read as 8 fields currently

而不是普通的

代码语言:javascript
复制
a,b,c,e,f,g,h   --> should be read as only 7 fields like the rest

所有其他行的模式

当我使用pd.read_csv('text.csv')读入DataFrame时,我会得到错误

错误标记数据。C错误:第36190行中的预期7个字段,saw 8

是否有办法将数据\"c\,d“读入一列?或者一般情况下处理这类案件的最佳做法是什么?

注意事项:上面提到的作为CSV文件一部分的行上的字母只是CSV每一行中值的占位符。它们不是圆柱。

如答案所示,这就是CSV文件中的数据。

代码语言:javascript
复制
    AA  BB    CC    DD  EE  FF  GG  HH
0   a   b   \"c\    d"  e   f   g   h
1   i   j     k     l   m   n   o   
2   p   q     r     s   t   u   v   

我想把它读到DataFrame中,如下所示,然后去掉引号和反斜杠

代码语言:javascript
复制
    AA  BB    CC    DD  EE  FF  GG
0   a   b   \"c\d"  e   f   g   h
1   i   j     k     l   m   n   o   
2   p   q     r     s   t   u   v   
EN

回答 5

Stack Overflow用户

发布于 2021-08-21 04:02:04

试试下面,它符合你的要求..。

样本文件:

代码语言:javascript
复制
$ cat test.csv
a,b,\\"c\\,d",e,f,g,h
i,j,k,l,m,n,o
p,q,r,s,t,u,v

基于最新职位变动的解决方案:

熊猫是处理表格数据的工具。这意味着每一行都应该包含相同数量的字段/行。因此,每一行中的字段应该是相同的顺序。

但是你的输入文件实际上不符合熊猫需要阅读CSV的标准。

在你的例子中,它期望7 fields在行36190,但是它看到了熊猫并不喜欢的8,因此你需要在处理某些或其他方式之前清理数据。

您能做的是,在读取csv时,先将数据读入一列,然后进行一些清理,我在下面解释了这些内容。

希望这将给你一个想法,如何进行,请记住,你必须清理你的数据,然后你读到熊猫。

代码语言:javascript
复制
# Read your input file, using read_csv, but as a single column (sep set to a non-used char).
df = pd.read_csv('test.csv', sep='|', names=['col1'])   
# Apply to replace with regex and remove backslash chars
df['col1'] = df['col1'].replace(r'(\\|\\)', '', regex=True)
df['col1']= df['col1'].replace(r'("c,d")', 'cd', regex=True)
# Now save these into a new CSV file
df.to_csv("new.csv")
# Read new csv file again
df2 = pd.read_csv("new.csv")
# drop the `Unnamed: 0'` column as this is not required
df2 = df2.drop('Unnamed: 0', 1)
# Replace the unwanted chars in order to get the rows with same length
df2['col1'] = df2['col1'].replace(r'(,d"|")', '', regex=True)
df2 = df2['col1'].replace(r'(,d"|")', '', regex=True).str.split(",", expand=True).rename(columns={0:'AA',1:'BB',2:'CC',3:'DD',4:'EE',5:'FF',6:'GG'})

结果:

代码语言:javascript
复制
print(df2)
  AA BB  CC DD EE FF GG
0  a  b  cd  e  f  g  h
1  i  j   k  l  m  n  o
2  p  q   r  s  t  u  v
票数 1
EN

Stack Overflow用户

发布于 2021-08-21 03:15:33

我认为您可以尝试pd.read_csv函数的pd.read_csv参数。我以前从来没有用过这个,我也不能百分之百肯定我理解你的问题。您是尝试将所有行的C&D列组合起来,还是仅在数据中存在这些特殊字符/模式时才这样做?下面是到文档的链接,可能有一些更有用的参数来解决这个问题:熊猫文献

如果您试图对所有行执行此操作,则可能需要创建一个字符串处理助手函数,该函数组合这些数据并删除反斜杠、双引号和逗号。

票数 0
EN

Stack Overflow用户

发布于 2021-08-21 03:24:26

强制列数:

代码语言:javascript
复制
df = pd.read_csv('in.csv', header=None, names=list('12345678'))

输出:

代码语言:javascript
复制
    1   2   3       4   5   6   7   8
0   a   b   c       d   e   f   g   h
1   a   b   \\"c\\  d"  e   f   g   h

然后从那里清理等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68869781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档