Pandas读取CSV文件只识别第一个逗号

3

我有一个CSV数据库,长这样:

Date,String
2010-12-31,'This, is, an example string'
2011-12-31,"This is an, example string"
2012-12-31,This is an example, string

我想使用pandas,因为我相信它是处理这种情况最广泛的库之一。是否有一种方法可以使用read_csv函数仅考虑第一个逗号来创建DataFrame?(无论在逗号后面的字符串是否有""或''或没有任何隔离符)。

如果不行,那么最有效的替代方法是什么?

非常感谢您提前的任何帮助,

1个回答

9
您可以通过在read_csvsep参数中传递正则表达式来作弊。我使用的正则表达式是^([^,]+),,它捕获第一个逗号。我还使用了engine参数,以避免pandas警告(因为默认的C引擎不支持正则表达式分隔符),并使用usecols参数确保我们只获取想要的列(如果没有它,我们还会得到一个“未命名”列,我不确定为什么)。您可以在read_csv文档中获取有关每个参数的更多信息。
test.csv
Date,String
2010-12-31,'This, is, an example string'
2011-12-31,"This is an, example string"
2012-12-31,This is an example, string

那么

print(pd.read_csv('test.csv', sep='^([^,]+),', engine='python', usecols=['Date', 'String']))

输出

         Date                         String
0  2010-12-31  'This, is, an example string'
1  2011-12-31   "This is an, example string"
2  2012-12-31     This is an example, string

如果 CSV 文件中有超过 2 列“实际”列,则此方法将无法正常工作。


你得到了一个未命名的列,因为你的分隔符在行的开头,所以在你的行左侧有一个空白列(就像你有一个包含类似于,foo,bar的行的csv文件一样)。 - Simon Pratt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接