對(duì)csv文件盛龄,又get了新的認(rèn)知

背景

在數(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)文章


以上是自己實(shí)踐中遇到的一些問題增淹,分享出來供大家參考學(xué)習(xí),歡迎關(guān)注微信公眾號(hào):DataShare 舶衬,不定期分享干貨

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末埠通,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子逛犹,更是在濱河造成了極大的恐慌端辱,老刑警劉巖梁剔,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異舞蔽,居然都是意外死亡荣病,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門渗柿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來个盆,“玉大人,你說我怎么就攤上這事朵栖〖樟粒” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵陨溅,是天一觀的道長终惑。 經(jīng)常有香客問我,道長门扇,這世上最難降的妖魔是什么雹有? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮臼寄,結(jié)果婚禮上霸奕,老公的妹妹穿的比我還像新娘。我一直安慰自己吉拳,他們只是感情好质帅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著留攒,像睡著了一般临梗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上稼跳,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音吃沪,去河邊找鬼汤善。 笑死,一個(gè)胖子當(dāng)著我的面吹牛票彪,可吹牛的內(nèi)容都是我干的红淡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼降铸,長吁一口氣:“原來是場噩夢啊……” “哼在旱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起推掸,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤桶蝎,失蹤者是張志新(化名)和其女友劉穎驻仅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體登渣,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡噪服,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胜茧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粘优。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖呻顽,靈堂內(nèi)的尸體忽然破棺而出雹顺,到底是詐尸還是另有隱情,我是刑警寧澤廊遍,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布嬉愧,位于F島的核電站,受9級(jí)特大地震影響昧碉,放射性物質(zhì)發(fā)生泄漏英染。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一被饿、第九天 我趴在偏房一處隱蔽的房頂上張望四康。 院中可真熱鬧,春花似錦狭握、人聲如沸闪金。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哎垦。三九已至,卻和暖如春恃疯,著一層夾襖步出監(jiān)牢的瞬間漏设,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工今妄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留郑口,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓盾鳞,卻偏偏與公主長得像犬性,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子腾仅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355