最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python pandas讀取CSV文件的注意事項(xiàng)(適合新手)

 更新時(shí)間:2021年06月20日 12:22:11   作者:郝偉博士  
這篇文章主要給大家介紹了關(guān)于Python pandas讀取CSV文件的注意事項(xiàng),非常適合新手,csv是我接觸的比較早的一種文件,比較好的是這種文件既能夠以電子表格的形式查看又能夠以文本的形式查看,需要的朋友可以參考下

前言

本文是給使用pandas的新手而寫,主要列出一些常見(jiàn)的問(wèn)題,根據(jù)筆者所踩過(guò)的坑,進(jìn)行歸納總結(jié),希望對(duì)讀者有所幫助。

示例文件

將以下內(nèi)容保存為文件 people.csv。

id,姓名,性別,出生日期,出生地,職業(yè),愛(ài)好
1,張小三,m,1992-10-03,北京,工程師,足球
2,李云義,m,1995-02-12,上海,程序員,讀書 下棋
3,周娟,女,1998-03-25,合肥,護(hù)士,音樂(lè),跑步
4,趙盈盈,Female,2001-6-32,,學(xué)生,畫畫
5,鄭強(qiáng)強(qiáng),男,1991-03-05,南京(nanjing),律師,歷史-政治

如果一切正常的話,在Jupyter Notebook 中應(yīng)該顯示以下內(nèi)容:

文件編碼

文件編碼格式是最容易出錯(cuò)的問(wèn)題之一。如果編碼格式不正確,就會(huì)完全讀取不出文件內(nèi)容,出現(xiàn)類似于以下的錯(cuò)誤, 讓人完全不知所措:

---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-6-8659adefcfa6> in <module>
----> 1 pd.read_csv('people.csv', encoding='gb2312')

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, dialect, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision)
    683         )
    684
--> 685         return _read(filepath_or_buffer, kwds)
    686
    687     parser_f.__name__ = name

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in _read(filepath_or_buffer, kwds)
    455
    456     # Create the parser.
--> 457     parser = TextFileReader(fp_or_buf, **kwds)
    458
    459     if chunksize or iterator:

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in __init__(self, f, engine, **kwds)
    893             self.options["has_index_names"] = kwds["has_index_names"]
    894
--> 895         self._make_engine(self.engine)
    896
    897     def close(self):

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in _make_engine(self, engine)
   1133     def _make_engine(self, engine="c"):
   1134         if engine == "c":
-> 1135             self._engine = CParserWrapper(self.f, **self.options)
   1136         else:
   1137             if engine == "python":

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in __init__(self, src, **kwds)
   1915         kwds["usecols"] = self.usecols
   1916
-> 1917         self._reader = parsers.TextReader(src, **kwds)
   1918         self.unnamed_cols = self._reader.unnamed_cols
   1919

pandas\_libs\parsers.pyx in pandas._libs.parsers.TextReader.__cinit__()

pandas\_libs\parsers.pyx in pandas._libs.parsers.TextReader._get_header()

UnicodeDecodeError: 'gb2312' codec can't decode byte 0x93 in position 2: illegal multibyte sequence

目前對(duì)于中文而言,最常使用的有 utf-8 和 gb2312 兩種格式,只需要指定正確的編碼。在不知道編碼的情況下,只需要嘗試兩次即可。padas默認(rèn)的文件編碼格式是 utf-8,所以如果出現(xiàn)以上錯(cuò)誤,只需使用 encoding=gb2312 再嘗試一下即可,如 pd.read_csv(file, encoding='gb2312')。

空值

空值是csv中也非常常見(jiàn),比如以下內(nèi)容:

import pandas as pd
df = pd.read_csv('people.csv')
v1=df['出生地'][3]
print(v1, type(v1))

輸出為:

nan <class 'float'>

由此可見(jiàn),空值也是有數(shù)據(jù)類型的,為 float 類型。

如何判斷空值有兩種方法,可以使用 math.isnan(x) 也可以使用 isinstance(float)。我們知道,DateFrame對(duì)象是包括Series對(duì)象,而在一個(gè)Series對(duì)象中,所有的數(shù)據(jù)類型默認(rèn)是一樣的,所以如果其數(shù)據(jù)類型推斷為字符串(str),那么直接使用 math.isnan(x) 則會(huì)報(bào)錯(cuò) TypeError: must be real number, not str 錯(cuò)誤,即必需為實(shí)數(shù),不能是字符串。所以,這時(shí)我們還需要使用 isinstance(x, flaot) 方法。
具體請(qǐng)看這個(gè)示例:

df.出生地=df.出生地.map(lambda x: '其他' if isinstance(x, float) else x)
df


日期錯(cuò)誤

出生日期中,有的數(shù)據(jù)錯(cuò)誤,如趙盈盈的出生日期是6月32號(hào),所以報(bào)錯(cuò)了。對(duì)于這樣類似的錯(cuò)誤,我們可以使用函數(shù)判斷的方式進(jìn)行處理,具體如下。

首先,編寫 isDate 函數(shù)用于判斷日期是否合法。

def isDate(adate):
    try:
        sects = adate.split('-')
        year = int(sects[0])
        month = int(sects[1])
        day = int(sects[2])
        days = [0, 31, 29 if year % 4 == 0 else 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
        return year > 0 and year < 9999 and month > 0 and month <= 12 and day > 0 and day <= days[month]
    except:
        return False

然后使用以下代碼進(jìn)行判斷:

for id in df.index:
    if not isDate(df.loc[id, '出生日期']):
        print(df.loc[id, '出生日期'])
        df.loc[id, '出生日期'] = '2000-01-01'

輸出結(jié)果如下,可見(jiàn)錯(cuò)誤的日期被修改成了2020年1月1日。

2001-6-32
   id   姓名      性別        出生日期          出生地   職業(yè)     愛(ài)好 
0   1  張小三       m  1992-10-03           北京  工程師     足球  
1   2  李云義       m  1995-02-12           上海  程序員  讀書 下棋  
2   3   周娟       女  1998-03-25           合肥   護(hù)士  音樂(lè),跑步  
3   4  趙盈盈  Female  2000-01-01          NaN   學(xué)生     畫畫   
4   5  鄭強(qiáng)強(qiáng)       男  1991-03-05  南京(nanjing)   律師  歷史-政治  

函數(shù)映射

方法1:直接使用labmda表達(dá)式

需要對(duì)數(shù)據(jù)列進(jìn)行復(fù)雜操作的時(shí)候,我們可以使用以下函數(shù)時(shí)行相應(yīng)的操作。

df=df.fillna('未知')
df.愛(ài)好=df.愛(ài)好.map(lambda x: x.split(' ')[0].split('-')[0].split(',')[0])
df

方法二:使用自定義函數(shù)

在進(jìn)行映射時(shí),如果操作比較簡(jiǎn)單,可以使用字典的方式進(jìn)行數(shù)值映射映射(參見(jiàn)下文)。但是如果操作比較復(fù)雜,則需要使用函數(shù)進(jìn)行映射。請(qǐng)看這個(gè)示例,讀取到性別時(shí),內(nèi)容有 ‘m', ‘M', ‘Female' 等內(nèi)容,現(xiàn)在需要其全部轉(zhuǎn)換為 男 或 女:

def set_sex(s):
    if s.lower() == 'm' or s.lower() == 'male':
        return '男'
    elif s.lower() == 'female':
        return '女'        
    return s

df = pd.read_csv('people.csv', converters={'性別': lambda x : set_sex(x)})
df

方法三:使用數(shù)值字典映射

在數(shù)據(jù)處理時(shí),數(shù)值型往往比字符串效率更高,所以在可能的情況下,我們希望將數(shù)據(jù)轉(zhuǎn)換成字符串處理。請(qǐng)看這個(gè)示例,將輸入的數(shù)據(jù)的性別中的男性轉(zhuǎn)換為1 女性轉(zhuǎn)換為0。操作如下:

總結(jié)

到此這篇關(guān)于Python pandas讀取CSV文件注意事項(xiàng)的文章就介紹到這了,更多相關(guān)pandas讀取CSV文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在python中創(chuàng)建表格的兩種方法實(shí)例

    在python中創(chuàng)建表格的兩種方法實(shí)例

    Python 是一種解釋型、面向?qū)ο?、?dòng)態(tài)數(shù)據(jù)類型的高級(jí)程序設(shè)計(jì)語(yǔ)言,下面這篇文章主要給大家介紹了關(guān)于如何在python中創(chuàng)建表格的兩種方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • python爬取豆瓣電影排行榜(requests)的示例代碼

    python爬取豆瓣電影排行榜(requests)的示例代碼

    這篇文章主要介紹了python爬取豆瓣電影排行榜(requests),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 詳解python如何提取瀏覽器中保存的網(wǎng)站登錄用戶名密碼

    詳解python如何提取瀏覽器中保存的網(wǎng)站登錄用戶名密碼

    很多瀏覽器都貼心地提供了保存用戶密碼功能,用戶一旦開(kāi)啟,就不需要每次都輸入用戶名、密碼,非常方便,作為python腳本,能否拿到用戶提前保存在瀏覽器中的用戶名密碼,用以自動(dòng)登錄呢,下面我們就來(lái)看看吧
    2023-08-08
  • Python實(shí)現(xiàn)PS濾鏡碎片特效功能示例

    Python實(shí)現(xiàn)PS濾鏡碎片特效功能示例

    這篇文章主要介紹了Python實(shí)現(xiàn)PS濾鏡碎片特效功能,結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)PS濾鏡碎片效果的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • python聚類算法選擇方法實(shí)例

    python聚類算法選擇方法實(shí)例

    在本篇文章里小編給大家整理的是一篇關(guān)于python聚類算法選擇方法實(shí)例,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-07-07
  • Linux下Python獲取IP地址的代碼

    Linux下Python獲取IP地址的代碼

    這篇文章主要介紹了Linux下Python獲取IP地址的代碼,需要的朋友可以參考下
    2014-11-11
  • 對(duì)Python3中bytes和HexStr之間的轉(zhuǎn)換詳解

    對(duì)Python3中bytes和HexStr之間的轉(zhuǎn)換詳解

    今天小編就為大家分享一篇對(duì)Python3中bytes和HexStr之間的轉(zhuǎn)換詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python數(shù)據(jù)可視化Pyecharts庫(kù)的使用教程

    Python數(shù)據(jù)可視化Pyecharts庫(kù)的使用教程

    pyecharts是一個(gè)用于生成echarts圖表的類庫(kù)。echarts是百度開(kāi)源的一個(gè)數(shù)據(jù)可視化庫(kù),用echarts生成的圖可視化效果非常棒。使用pyechart庫(kù)可以在python中生成echarts數(shù)據(jù)圖。本文將詳細(xì)介紹一下Pyecharts庫(kù)的使用,需要的可以參考一下
    2022-02-02
  • Python如何通過(guò)地址獲取變量

    Python如何通過(guò)地址獲取變量

    這篇文章主要介紹了Python如何通過(guò)地址獲取變量,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python中圖片轉(zhuǎn)換為pdf實(shí)現(xiàn)方法

    python中圖片轉(zhuǎn)換為pdf實(shí)現(xiàn)方法

    本文主要介紹了使用Python的Pillow分支和reportlab庫(kù)將圖片轉(zhuǎn)換為PDF文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03

最新評(píng)論

合川市| 桐梓县| 鹰潭市| 琼结县| 杨浦区| 锡林郭勒盟| 汝南县| 阳朔县| 筠连县| 巴里| 馆陶县| 延寿县| 磐石市| 土默特右旗| 泸溪县| 开封县| 大洼县| 河西区| 庆城县| 沁阳市| 双峰县| 甘南县| 嘉义市| 建始县| 河东区| 钟祥市| 佛教| 饶平县| 土默特右旗| 若羌县| 神木县| 平顶山市| 朔州市| 石门县| 定西市| 依兰县| 广宁县| 大名县| 禹州市| 平乐县| 股票|