2017-04-04 85 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