2017-04-04 87 views
1

我尝试在熊猫中导入CSV文件时出现问题。该文件的结构如下:将CSV导入到熊猫之前更改CSV

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

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

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

+0

包括示例文件和您尝试 – Shijo

回答

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 
+0

谢谢你的答案代码。 delimiter =',',quoting = 3正在做导入文件的诀窍,但我仍然需要处理位于第一列和最后一列的值的双引号。 – clowny

+0

添加了代码以照顾数据中的报价 – Shijo

+0

谢谢,它工作得很好! – clowny

0

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

您可以手动读取文件并在将其传送到熊猫之前对其进行操作。

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