pandas 用左右引号字符解析 csv

Posted

技术标签:

【中文标题】pandas 用左右引号字符解析 csv【英文标题】:pandas parse csv with left and right quote chars 【发布时间】:2017-07-26 09:49:32 【问题描述】:

我正在尝试在 pandas 中读取一个结构如下的文件

<first>$$><$$<second>$$><$$<first>$$>
<foo>$$><$$<bar>$$><$$<baz>$$>

使用pd.read_csv('myflie.csv', encoding='utf8', sep='$$&gt;&lt;$$', decimal=',') 将无法产生有意义的结果。所有数据都被读入单个列,并且不会提取引号。

【问题讨论】:

【参考方案1】:

您需要通过\ 转义$,因为它被读取为正则表达式(字符串结尾):

(分隔符 > 1 个字符且不同于 '\s+' 被解释为正则表达式)

import pandas as pd
from pandas.compat import StringIO


temp=u"""<first>$$><$$<second>$$><$$<first>$$>
<foo>$$><$$<bar>$$><$$<baz>$$>"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), 
                 encoding='utf8', 
                 sep='\$\$><\$\$', 
                 decimal=',', 
                 header=None, 
                 engine='python')

print (df)
         0         1           2
0  <first>  <second>  <first>$$>
1    <foo>     <bar>    <baz>$$>

然后对于从最后一列删除$$&gt; 是可能的使用replace(添加&amp; 作为字符串结尾):

df.iloc[:, -1] = df.iloc[:, -1].str.replace('\$\$>$', '')
print (df)
         0         1        2
0  <first>  <second>  <first>
1    <foo>     <bar>    <baz>

对于删除引用:

df = df.replace(['^<', '>$'], ['', ''], regex=True)
print (df)
       0       1      2
0  first  second  first
1    foo     bar    baz

两者一起替换:

df = df.replace(['^<', '>$', '>\$\$'], ['', '', ''], regex=True)
print (df)
       0       1      2
0  first  second  first
1    foo     bar    baz

【讨论】:

我怎样才能另外删除引号 ?常规的 pandas 引号参数只需要一个字符,例如" 但我需要一个左右引号字符。 即有没有比遍历所有列并执行两个调用更好的方法df[0] = df[0].str.replace('&lt;', '') df[0] = df[0].str.replace('&gt;', '') df 哇,答案很好。 如何添加标题以进行替换?目前我会使用 col = df.columns.map(lambda x: x.replace('', '')).values df.columns = col df.head() 这似乎依赖于 pythonic。 我认为更简单的是df.columns = df.columns.to_series().replace(['^&lt;', '&gt;$', '&gt;\$\$'], ['', '', ''], regex=True)

以上是关于pandas 用左右引号字符解析 csv的主要内容,如果未能解决你的问题,请参考以下文章

Python CSV 解析,转义引号字符

Pandas read_csv 用字符串“nan”填充空值,而不是解析日期

CSV 解析包含双引号和逗号的字符串

pandas使用read_csv函数读取文件并解析日期数据列(parse dates)pandas使用read_csv函数读取文件并将缺失值转化为空字符串

将不同类型的 CSV 字符串加载到 Pandas 数据框中,拆分列,解析日期

在字符串周围用引号编写csv(Python)