在将CSV导入pandas

时间:2017-04-04 13:11:15

标签: python csv pandas quotes double-quotes

我在尝试导入pandas的CSV文件时出现问题。该文件的结构如下:

  • 该文件的第一个字符是单引号;
  • 该文件的最后一个字符是单引号;
  • CSV的每一行都以双引号开头,以双引号结尾,后跟\ n

所以我在使用pandas.read_csv导入它时遇到问题。理想情况下,我希望pandas在导入时忽略单引号和双引号(不考虑数据框的结构,而不是将它们作为字符导入)。

我真的不知道在使用pandas.read_csv之前是否应该操纵CSV文件,或者我可以选择忽略这些字符。

2 个答案:

答案 0 :(得分:1)

pd.read_csv方法第一个参数是文件名或流。

您可以手动读取文件并在将其传递给pandas之前对其进行操作。

sio = StringIO("id,category,value\n1,beer,2.40\n2,wine,6.40\n3,$$$Theawsomestuff$$$###,166.00"
pd.read_csv(sio)
   id                 category  value
0   1                     beer    2.4
1   2                     wine    6.4
2   3  $$$Theawsomestuff$$$###  166.0

因此,继承StringIO,您可以更改read方法

的行为
class StreamChanger(StringIO):
    def read(self, **kwargs):
        data = super().read(**kwargs)
        data = data.replace("$", "")
        data = data.replace("#", "")
        return data

sio = StreamChanger("id,category,value\n1,beer,2.40\n2,wine,6.40\n3,$$$Theawsomestuff$$$###,166.00")
pd.read_csv(sio)
   id                 category  value
0   1                     beer    2.4
1   2                     wine    6.4
2   3           Theawsomestuff  166.0

答案 1 :(得分:1)

使用参数'引用'并将值3传递给read_csv。创建数据框后,您应该处理数据和标题中的引号。

import pandas as pd


df=pd.read_csv('check.txt',doublequote=True,delimiter=',',quoting=3)
df=df.replace({'"': '','\'':''}, regex=True)
df.columns = ['Id1','StartTime','start_lat','start_long','StartGeohash']

print df 

示例文件

'Id1,StartTime,start_lat,start_long,StartGeohash
"113,2016-11-01 10:50:28.063,-33.139507,-100.226715,9vbsx2" 
"113,2016-11-02 10:49:24.063,-33.139507,-100.226715,9vbsx2" 
"115,2016-11-03 10:55:20.063,-36.197660,-101.186050,9y2jcm"'

输出

   Id1                StartTime  start_lat  start_long StartGeohash
0  113  2016-11-01 10:50:28.063 -33.139507 -100.226715      9vbsx2 
1  113  2016-11-02 10:49:24.063 -33.139507 -100.226715      9vbsx2 
2  115  2016-11-03 10:55:20.063 -36.197660 -101.186050       9y2jcm