欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

pandas讀取CSV文件時(shí)查看修改各列的數(shù)據(jù)類型格式

 更新時(shí)間:2019年07月07日 11:53:00   作者:真不會(huì)修電腦  
這篇文章主要介紹了pandas讀取CSV文件時(shí)查看修改各列的數(shù)據(jù)類型格式,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

下面給大家介紹下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)文章

最新評(píng)論