背景
在數(shù)據(jù)分析時(shí)饰迹,有時(shí)我們會(huì)碰到csv格式文件,需要先進(jìn)行數(shù)據(jù)處理余舶,轉(zhuǎn)換成所需要的數(shù)據(jù)格式啊鸭,然后才能進(jìn)行分析
業(yè)務(wù)側(cè)的同學(xué)可能對(duì)Excel文件比較熟悉,Excel可以把單個(gè)sheet直接保存為csv文件匿值,也可以直接讀取csv文件赠制,變成Excel文件
技術(shù)側(cè)的同學(xué)有時(shí)需要把數(shù)據(jù)庫里面的數(shù)據(jù)導(dǎo)出到一個(gè)csv文件,有時(shí)也需要把別人給的csv文件加載到數(shù)據(jù)庫中
csv文件在各個(gè)地方都這么流行挟憔,你真的徹底了解它嗎钟些?
CSV(逗號(hào)分隔值文件格式),逗號(hào)分隔值(Comma-Separated Values绊谭,CSV政恍,有時(shí)也稱為字符分隔值,因?yàn)榉指糇址部梢圆皇嵌禾?hào))
csv文件包含的各種數(shù)據(jù)
-
常規(guī)的內(nèi)容
表格中:
常規(guī)內(nèi)容-表格中
csv文件中:
常規(guī)內(nèi)容-csv文件中 -
字段內(nèi)部有逗號(hào)
表格中:
字段內(nèi)部有逗號(hào)-表格中
csv文件中:
字段內(nèi)部有逗號(hào)-csv文件中 -
字段內(nèi)部有引號(hào)
表格中:
字段內(nèi)部有引號(hào)-表格中
csv文件中:
字段內(nèi)部有引號(hào)-csv文件中 -
字段內(nèi)部有換行符
表格中:
字段內(nèi)部有換行符-表格中
csv文件中:
字段內(nèi)部有換行符-csv文件中 -
字段內(nèi)部有空格
表格中:
字段內(nèi)部有空格-表格中
csv文件中:
字段內(nèi)部有空格-csv文件中
csv文件規(guī)則
從上面的各種內(nèi)容可以看出达传,當(dāng)字段中包含特殊的字符時(shí)篙耗,在csv文件中會(huì)用雙引號(hào)進(jìn)行特殊處理
官方標(biāo)準(zhǔn):
RFC4180:https://www.rfc-editor.org/rfc/rfc4180.txt
維基百科wiki:https://wiki.lazarus.freepascal.org/CSV
- 字段內(nèi)包含逗號(hào)迫筑, 雙引號(hào), 或是換行符的字段必須放在雙引號(hào)內(nèi)
- 字段內(nèi)包含引號(hào)必須在其前面增加一個(gè)引號(hào)宗弯,來實(shí)現(xiàn)引號(hào)的轉(zhuǎn)碼
- 元素中的換行符將被保留下來
- 分隔符逗號(hào)前后的空格仍然會(huì)被保留
用pandas進(jìn)行解析
-
常規(guī)的內(nèi)容
常規(guī)的內(nèi)容-解析
import pandas as pd
data1=pd.read_csv('1-常規(guī)的內(nèi)容.csv',encoding='GB2312')
data1
-
字段內(nèi)部有逗號(hào)
字段內(nèi)部有逗號(hào)-解析
import pandas as pd
data1=pd.read_csv('2-字段內(nèi)部有逗號(hào).csv',encoding='GB2312',quotechar='"')
data1
-
字段內(nèi)部有引號(hào)
字段內(nèi)部有引號(hào)-解析
import pandas as pd
data1=pd.read_csv('3-字段內(nèi)部有引號(hào).csv',encoding='GB2312',quotechar='"')
data1
-
字段內(nèi)部有換行符
該程序是在 Windows 平臺(tái)運(yùn)行脯燃,換行符為\r\n
字段內(nèi)部有換行符-解析
import pandas as pd
data1=pd.read_csv('4-字段內(nèi)部有換行符.csv',
encoding='GB2312',
quotechar='"',
engine='python')
data1
-
字段內(nèi)部有空格
字段內(nèi)部有空格-解析
import pandas as pd
data1=pd.read_csv('5-字段內(nèi)部有空格.csv',
encoding='GB2312',
quotechar='"')
data1
pd.read_csv部分參數(shù)解釋
import pandas as pd
print(pd.__version__) #1.3.4
完整的參數(shù):
pd.read_csv(
filepath_or_buffer: 'FilePathOrBuffer',
sep=<no_default>,delimiter=None,header='infer',names=<no_default>,
index_col=None,usecols=None,squeeze=False,prefix=<no_default>,
mangle_dupe_cols=True,dtype: 'DtypeArg | None' = None,
engine=None,converters=None,true_values=None,
false_values=None,skipinitialspace=False,skiprows=None,
skipfooter=0,nrows=None,na_values=None,keep_default_na=True,
na_filter=True,verbose=False,skip_blank_lines=True,
parse_dates=False,infer_datetime_format=False,keep_date_col=False,
date_parser=None,dayfirst=False,cache_dates=True,iterator=False,
chunksize=None,compression='infer',thousands=None,
decimal: 'str' = '.',lineterminator=None,quotechar='"',
quoting=0,doublequote=True,escapechar=None,
comment=None,encoding=None,encoding_errors: 'str | None' = 'strict',
dialect=None,error_bad_lines=None,warn_bad_lines=None,
on_bad_lines=None,delim_whitespace=False,low_memory=True,
memory_map=False,float_precision=None,storage_options: 'StorageOptions' = None,
)
下面主要解釋一些常用的參數(shù):
sep
sep參數(shù)是字符型的,代表每行數(shù)據(jù)內(nèi)容的分隔符號(hào)蒙保,默認(rèn)是逗號(hào)辕棚,另外常見的還有制表符(\t)、空格等追他,根據(jù)數(shù)據(jù)的實(shí)際情況傳值
還提供了一個(gè)參數(shù)名為delimiter的定界符坟募,這是一個(gè)備選分隔符,是sep的別名邑狸,效果和sep一樣懈糯。如果指定該參數(shù),則sep參數(shù)失效dtype
指定各數(shù)據(jù)列的數(shù)據(jù)類型单雾,建議在導(dǎo)入數(shù)據(jù)時(shí)全部使用字符型赚哗,dtype='str'
,后面在數(shù)據(jù)處理時(shí)再轉(zhuǎn)換為需要的類型engine
解析器硅堆、引擎屿储,可以選擇C或Python。
C語言的速度最快渐逃,Python語言的功能最為完善iterator
是否設(shè)置為迭代器够掠,如果設(shè)置為True,則返回一個(gè)TextFileReader對(duì)象茄菊,并可以對(duì)它進(jìn)行迭代疯潭,以便逐塊處理文件,一般結(jié)合chunksize
使用面殖,指定文件塊的大小竖哩,分塊處理大型CSV文件lineterminator
每行的解釋符號(hào),但只能允許一個(gè)字符長度脊僚,僅對(duì)C解析器有效quotechar
字段之間的定界符相叁,這樣就能正確解析包含特殊符號(hào)的字段了
歷史相關(guān)文章
- Python pandas在讀取csv文件時(shí)(linux與windows之間傳輸),數(shù)據(jù)行數(shù)不一致的問題
- Python pandas數(shù)據(jù)分列辽幌,分割符號(hào)&固定寬度
- Python 字符串格式化方法總結(jié)
以上是自己實(shí)踐中遇到的一些問題增淹,分享出來供大家參考學(xué)習(xí),歡迎關(guān)注微信公眾號(hào):DataShare 舶衬,不定期分享干貨