pandas讀取CSV文件時(shí)查看修改各列的數(shù)據(jù)類型格式
下面給大家介紹下pandas讀取CSV文件時(shí)查看修改各列的數(shù)據(jù)類型格式,具體內(nèi)容如下所述:
我們?cè)谡{(diào)bug的時(shí)候會(huì)經(jīng)常查看、修改pandas列數(shù)據(jù)的數(shù)據(jù)類型,今天就總結(jié)一下:
1.查看:
Numpy和Pandas的查看方式略有不同,一個(gè)是dtype,一個(gè)是dtypes
print(Array.dtype) #輸出int64 print(df.dtypes) #輸出Df下所有列的數(shù)據(jù)格式 a:int64,b:int64
2.修改
import pandas as pd import numpy as np df = pd.read_csv('000917.csv',encoding='gbk') df = df[df['漲跌幅']!='None'] df['漲跌幅'] = df['漲跌幅'].astype(np.float64) print(df[df['漲跌幅']>5])
ps:在Pandas中更改列的數(shù)據(jù)類型
先看一個(gè)非常簡(jiǎn)單的例子:
a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']] df = pd.DataFrame(a)
有什么方法可以將列轉(zhuǎn)換為適當(dāng)?shù)念愋停坷?,上面的例子,如何將?和3轉(zhuǎn)為浮點(diǎn)數(shù)?有沒(méi)有辦法將數(shù)據(jù)轉(zhuǎn)換為DataFrame格式時(shí)指定類型?或者是創(chuàng)建DataFrame,然后通過(guò)某種方法更改每列的類型?理想情況下,希望以動(dòng)態(tài)的方式做到這一點(diǎn),因?yàn)榭梢杂袛?shù)百個(gè)列,明確指定哪些列是哪種類型太麻煩??梢约俣苛卸及嗤愋偷闹怠?/p>
解決方法
可以用的方法簡(jiǎn)單列舉如下:
對(duì)于創(chuàng)建DataFrame的情形
如果要?jiǎng)?chuàng)建一個(gè)DataFrame,可以直接通過(guò)dtype參數(shù)指定類型:
df = pd.DataFrame(a, dtype='float') #示例1 df = pd.DataFrame(data=d, dtype=np.int8) #示例2 df = pd.read_csv("somefile.csv", dtype = {'column_name' : str})
對(duì)于單列或者Series
下面是一個(gè)字符串Seriess的例子,它的dtype為object:
>>> s = pd.Series(['1', '2', '4.7', 'pandas', '10']) >>> s 0 1 1 2 2 4.7 3 pandas 4 10 dtype: object
使用to_numeric轉(zhuǎn)為數(shù)值。默認(rèn)情況下,它不能處理字母型的字符串'pandas':
>>> pd.to_numeric(s) # or pd.to_numeric(s, errors='raise') ValueError: Unable to parse string
可以將無(wú)效值強(qiáng)制轉(zhuǎn)換為NaN,如下所示:
>>> pd.to_numeric(s, errors='coerce') 0 1.0 1 2.0 2 4.7 3 NaN 4 10.0 dtype: float64
如果遇到無(wú)效值,第三個(gè)選項(xiàng)就是忽略該操作:
>>> pd.to_numeric(s, errors='ignore') # the original Series is returned untouched
對(duì)于多列或者整個(gè)DataFrame
如果想要將這個(gè)操作應(yīng)用到多個(gè)列,依次處理每一列是非常繁瑣的,所以可以使用DataFrame.apply處理每一列。
對(duì)于某個(gè)DataFrame:
>>> a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']] >>> df = pd.DataFrame(a, columns=['col1','col2','col3']) >>> df col1 col2 col3 0 a 1.2 4.2 1 b 70 0.03 2 x 5 0
然后可以寫(xiě):
df[['col2','col3']] = df[['col2','col3']].apply(pd.to_numeric)
那么'col2'和'col3'根據(jù)需要具有float64類型。
但是,可能不知道哪些列可以可靠地轉(zhuǎn)換為數(shù)字類型。在這種情況下,設(shè)置參數(shù):
df.apply(pd.to_numeric, errors='ignore')
然后該函數(shù)將被應(yīng)用于整個(gè)DataFrame,可以轉(zhuǎn)換為數(shù)字類型的列將被轉(zhuǎn)換,而不能(例如,它們包含非數(shù)字字符串或日期)的列將被單獨(dú)保留。
另外pd.to_datetime和pd.to_timedelta可將數(shù)據(jù)轉(zhuǎn)換為日期和時(shí)間戳。
軟轉(zhuǎn)換——類型自動(dòng)推斷
版本0.21.0引入了infer_objects()方法,用于將具有對(duì)象數(shù)據(jù)類型的DataFrame的列轉(zhuǎn)換為更具體的類型。
例如,用兩列對(duì)象類型創(chuàng)建一個(gè)DataFrame,其中一個(gè)保存整數(shù),另一個(gè)保存整數(shù)的字符串:
>>> df = pd.DataFrame({'a': [7, 1, 5], 'b': ['3','2','1']}, dtype='object') >>> df.dtypes a object b object dtype: object
然后使用infer_objects(),可以將列'a'的類型更改為int64:
>>> df = df.infer_objects() >>> df.dtypes a int64 b object dtype: object
由于'b'的值是字符串,而不是整數(shù),因此'b'一直保留。
astype強(qiáng)制轉(zhuǎn)換
如果試圖強(qiáng)制將兩列轉(zhuǎn)換為整數(shù)類型,可以使用df.astype(int)。
示例如下:
a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']] df = pd.DataFrame(a, columns=['one', 'two', 'three']) df Out[16]: one two three 0 a 1.2 4.2 1 b 70 0.03 2 x 5 0 df.dtypes Out[17]: one object two object three object df[['two', 'three']] = df[['two', 'three']].astype(float) df.dtypes Out[19]: one object two float64 three float64
總結(jié)
以上所述是小編給大家介紹的pandas讀取CSV文件時(shí)查看修改各列的數(shù)據(jù)類型格式,希望對(duì)大家有所幫助,如果有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
相關(guān)文章
剖析Django中模版標(biāo)簽的解析與參數(shù)傳遞
這篇文章主要介紹了剖析Django中模版標(biāo)簽的解析與參數(shù)傳遞,Django是重多高人氣Python框架中最為著名的一個(gè),需要的朋友可以參考下2015-07-07Python DNS查詢放大攻擊實(shí)現(xiàn)原理解析
這篇文章主要介紹了Python DNS查詢放大攻擊實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10python 利用opencv實(shí)現(xiàn)圖像網(wǎng)絡(luò)傳輸
這篇文章主要介紹了python 如何利用opencv實(shí)現(xiàn)圖像網(wǎng)絡(luò)傳輸,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-11-11使用Python發(fā)送郵件附件以定時(shí)備份MySQL的教程
這篇文章主要介紹了使用Python發(fā)送郵件附件以定時(shí)備份MySQL的教程,本文的示例基于CentOS,需要的朋友可以參考下2015-04-04Python?pandas找出、刪除重復(fù)的數(shù)據(jù)實(shí)例
在面試中很可能遇到給定一個(gè)含有重復(fù)元素的列表,刪除其中重復(fù)的元素,下面這篇文章主要給大家介紹了關(guān)于Python?pandas找出、刪除重復(fù)數(shù)據(jù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07使用NumPy和pandas對(duì)CSV文件進(jìn)行寫(xiě)操作的實(shí)例
今天小編就為大家分享一篇使用NumPy和pandas對(duì)CSV文件進(jìn)行寫(xiě)操作的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06詳解Python中的相對(duì)導(dǎo)入和絕對(duì)導(dǎo)入
絕對(duì)導(dǎo)入是指跳過(guò)包內(nèi),直接搜索 sys.path ,在sys.path的基礎(chǔ)上進(jìn)行我們的模塊搜索。相對(duì)導(dǎo)入是指先包內(nèi),再包外,再,,,那么下面這篇文章主要給大家介紹了Python中的相對(duì)導(dǎo)入和絕對(duì)導(dǎo)入,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-01-01python?matplotlib繪圖過(guò)程中設(shè)置線條顏色實(shí)戰(zhàn)舉例
Matplotlib是一個(gè)用于數(shù)據(jù)可視化和創(chuàng)建交互式圖表的Python庫(kù),下面這篇文章主要給大家介紹了關(guān)于python?matplotlib繪圖過(guò)程中設(shè)置線條顏色的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05Python yield生成器和return對(duì)比代碼實(shí)例
這篇文章主要介紹了Python yield生成器和return對(duì)比代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04