在将其导入 pandas 之前更改 CSV

Change CSV before importing it to pandas

我尝试在 pandas 中导入 CSV 文件时遇到问题。文件结构如下:

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

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

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

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

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